web-dev-qa-db-ja.com

Laravel:モデルと関連モデルを一度に更新する方法

次のことを行うことが可能かどうかは誰にもわかりますか?

UserというモデルとBestFriendというモデルがあるとします。ユーザーと親友の関係は1:1です。

これらのケースでは、このようなことをして、私の都市と友人の都市を同時に変更できるようにしたいと思います。

$me = User::find(1);

$me->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));

したがって、基本的に、Eloquentが配列キー「bestfriend.city」に基づいて関係を理解するのに十分賢いかどうかを知りたいと思います。

助けてくれてありがとう!

更新:

Laravelフォーラムで解決策を見つけましたが、他の誰かが同じものを探している場合は、ここにも投稿します:)

追加するモデルに

// In your model...
public function setBestFriendArrayAttribute($values)
{
    $this->bestfriend->update($values);
}

そして、あなたはこのようにそれを呼び出すことができます

$me->update(array(
    'city' => 'amsterdam',
    'BestFriendArray' => array(
        'city' => 'amsterdam'
    )
));

魔法のように機能します!

25
MvdP

モデルに設定する必要はありません。このようにコントローラーで実行できます。

$me = User::find(1)->bestFriend()->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));

更新を少し変更しました。

8
dakine

Eloquentはかなり賢いですが、それができるとは思いません。 UserとBestFriendを個別に更新する必要があります。しかし、一度それを行うと、Eloquentには2つを接続する方法があります。

$me = User::find(1);
$bff= BestFriend::find(1);

$me->city = 'amsterdam'; 
$bff->city = 'amsterdam';

$me->bestfriend()->associate($bff);

これはもちろん、ユーザーモデルに次のような機能があることを前提としています...

public function bestfriend()
{
    return $this->hasOne('BestFriend');
}
4
user1669496