Подтвердить что ты не робот

Laravel: Красноречивый способ обновить модель и связанные с ней модели за один раз

Кто-нибудь знает, возможно ли это сделать следующее:

Скажем, у нас есть модель под названием User и модель под названием BestFriend. Связь между пользователем и лучшим другом - 1:1.

Я бы хотел, чтобы в этих случаях можно было сделать что-то подобное, изменить мой город и город моего друга в то же время.

$me = User::find(1);

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

Итак, в основном я хотел бы знать, достаточно ли Eloquent, чтобы понять отношения на основе ключа массива "bestfriend.city".

Заранее благодарим за помощь!

Update:

Нашел решение на форумах Laravel, но я также разместил его здесь, если кто-то ищет то же самое:)

В модели вы добавляете

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

И тогда вы можете так называть

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

Работает как шарм!

4b9b3361

Ответ 1

Вам не нужно устанавливать его на своей модели. Вы можете сделать это на своем контроллере, как это.

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

Я немного изменил ваше обновление.

Ответ 2

Красноречивый довольно умный, но я не думаю, что он может это сделать. Вам придется обновлять User и BestFriend самостоятельно. Но как только вы это сделали, у Eloquent есть методы для присоединения двух.

$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');
}