Сохранение связанных записей в Laravel

#laravel-4

#laravel-4

Вопрос:

Я пытаюсь связать две записи вместе, но это не работает.

Мой метод для этого (внутри репозитория) выглядит следующим образом:

 public function create(array $data)
{
    // Create the user
    $user = $this->userModel->create([
        'username' => $data['username'],
        'email'    => $data['email'],
        'password' => $data['password']
    ]);

    // Create the profile
    $profile = $this->profileModel->create([
        'location' => $data['profile']['location'],
        'bio'      => $data['profile']['bio']
    ]);

    $user->profile()->associate($profile);

    $user->save();

    return true;
}
  

(полный источник для этого можно найти здесь: https://github.com/LimeBlast/prijs/blob/master/app/Prijs/Repository/User/EloquentUser.php#L44 )

Но я получаю сообщение об ошибке: «Вызов неопределенного метода IlluminateDatabase Query Builder::associate()»

Что я делаю не так? Спасибо.

Комментарии:

1. Это будет связано с отношениями. Если в вашем профиле модели пользователя есть одно отношение, бьюсь об заклад, это ваша проблема.

2. Связь hasone ( github.com/LimeBlast/prijs/blob/master/app/models/User.php#L40 ) и belongsto в ответ ( github.com/LimeBlast/prijs/blob/master/app/models /… ) — что мне нужно сделать, чтобы это исправить?

Ответ №1:

Попробуйте

 $profile->user()->associate($user);
$profile->save();
  

Это было бы моим лучшим предположением. Вам нужно вызвать ассоциацию для объекта, у которого есть метод belongsTo

Комментарии:

1. Спасибо. Я не могу поверить, что у меня все было наоборот.

2. Я просто хотел добавить, что, по-видимому $user->profile()->save($profile); , $user->save(); также работает.