Использование Institution::max('id')
создает состояние гонки. Поскольку create()
статический метод Eloquent::Model
возвращает вновь созданную модель, вы можете просто сделать:
$institution = Institution::create($request->all());
User::create([
'name' => $request['name'],
'lastname' => $request['lastname'],
'phone' => $request['phone'],
'email' => $request['email'],
'password' => $request['password'],
'state_id' => 1,
'profile_id' => 1,
'institution_id' => $institution->id,
]);
Создание записи с известными родительскими идентификаторами, как правило, хорошо, если ваша цель состоит в том, чтобы свести к минимуму количество запросов к базе данных и у вас есть иды соответствующих моделей.
Другой способ сделать это, хотя он вызывает больше запросов на обновление, заключается в использовании Eloquent's built-in methods для добавления связанных моделей. Например:
$institution = Institution::create($request->all());
$state = State::find(1);
$profile = Profile::find(1);
$user = new User([
'name' => $request['name'],
'lastname' => $request['lastname'],
'phone' => $request['phone'],
'email' => $request['email'],
'password' => $request['password']
]);
$user->state()->associate($state);
$user->profile()->associate($profile);
$user->profile()->associate($institution);
$user->save();
Однако, в этой ситуации, так как не уже загруженные соответствующие модели, и вы знаете, их идентификаторы, нет необходимости получать их только, чтобы связать их с пользователем.
Благодарим за предоставленный ответ: D – Lagul
Отредактировано ссылка, чтобы указать на документы Laravel 5.1 (вместо 4.2). –