2015-07-08 3 views
0

Привета у меня есть следующий код для создания моих записейСоздать запись с Relation Laravel 5,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'), 
     ]); 

Страшных атрибутами Thats пользователя Исправьте осуществить так? Последние 3 пользовательских атрибута, правильно ли это сделать? или есть лучше

ответ

0

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

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

+0

Благодарим за предоставленный ответ: D – Lagul

+0

Отредактировано ссылка, чтобы указать на документы Laravel 5.1 (вместо 4.2). –