mcmraak
@mcmraak
php+sql+js+bicycle+crutches

Laravel как создать сразу две взаимосвязанных модели?

Здравствуйте, подскажите пожалуйста! С помощью orm хочу создать сразу две взаимосвязанных модели, пока что код выглядит вот так, но мне кажется это не правильно, наверное можно одним запросом, подскажите хотя-бы куда копать. Спасибо.

$user = new User; // id|space_id|name
$space = new Space; // id|user_id

$user->name = $name;
$user->save();
$space->user_id = $user->id;
$space->save();
$user = User::find($user->id);
$user->space_id = $space->id;
$user->save();
  • Вопрос задан
  • 315 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Раз у вас денормализация данных, то никуда не уйти от тройного сохранения.
Вы уверены, что эта денормализация вам нужна, вы сделали её осознанно?
Если вы храните ссылки на другую сущность в обеих моделях просто по незнанию, то не делайте этого и проблема возникать не будет. Я бы хранил в Space ссылку на User и всё, потому что, скорее всего, Space без User быть не может, а наоборот - вполне.

Если у вас в моделях корректно указаны связи, можно переписать вот так, но общий смысл от этого не поменяется:
$user = new User; // id|space_id|name
$space = new Space; // id|user_id

$user->name = $name;
$user->save();

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

$user->space->associate($space);
$user->save();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
В модели User:

public function space()
{
return $this->hasOne('App\Space');
}

+ в миграциях указываешь связи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы