Привет, у меня есть следующий код для создания моих записей
Institution::create($request->all());
User::create([
'name' => $request['name'],
'lastname' => $request['lastname'],
'phone' => $request['phone'],
'email' => $request['email'],
'password' => $request['password'],
'state' => 1,
'profile_id' => 1,
'institution_id' => Institution::max('id'),
]);
Последние атрибуты для пользователя, которые правильно выполняют это приложение? Последние 3 пользовательских атрибута, правильно это сделать? или есть лучший
Использование Institution::max('id')
создает условие гонки. Поскольку static-метод 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 для добавления связанных моделей. Например:
$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();
Однако в этой ситуации, поскольку связанные модели еще не загружены, и вы знаете их идентификаторы, нет необходимости извлекать их только для связи с пользователем.