Создать запись с помощью Relation Laravel 5.1

1

Привет, у меня есть следующий код для создания моих записей

    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 пользовательских атрибута, правильно это сделать? или есть лучший

Теги:
laravel-5.1

1 ответ

0
Лучший ответ

Использование 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();

Однако в этой ситуации, поскольку связанные модели еще не загружены, и вы знаете их идентификаторы, нет необходимости извлекать их только для связи с пользователем.

  • 0
    Спасибо за ответ, воплотим в жизнь: D
  • 0
    Отредактировал ссылку, чтобы указать на документы Laravel 5.1 (а не 4.2).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню