2014-03-06 5 views
5

Я понимаю, что для того, чтобы сохранить внешний ключ, следует использовать соответствующую модель и функцию associate(), но это действительно стоит свеч идти через этотСохранение модели с несколькими внешними ключами в Laravel 4

$user = new User([ 
    'name' => Input::get('name'), 
    'email' => Input::get('email') 
]); 

$language = Language::find(Input::get('language_id'); 
$gender = Gender::find(Input::get('gender_id'); 
$city = City::find(Input::get('city_id'); 

$user->language()->associate($language); 
$user->gender()->associate($gender); 
$user->city()->associate($city); 

$user->save(); 

когда можно просто это сделать?

User::create(Input::all()); 

Я чувствую, что я-то здесь отсутствует, может быть, есть еще проще и чище способ справиться с внешними ключами в контроллерах (и просмотров)?

ответ

0

Я действительно ничего плохого не вижу с выполнением User::create(Input::all());.

Очевидно, что вам нужна какая-то проверка, но она делает то же самое.

Я думаю, что метод associate() более полезен для инверсии вашей ситуации.

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

$city = City::create(Input::all()); выполнит только первую половину ваших требований, так как пользователь еще не прикреплен, так как город не имеет колонки user_id.

Вы бы тогда нужно сделать что-то вроде $city->user()->associate(User::find(Auth::user()->id));

+0

Спасибо за ваш вклад, конечно, требуется проверка, но это для обоих случаев, поэтому я не ставил его нарочно. Может быть, вы правы, в вашем сценарии associate() имеет больше смысла, но я думаю, что я еще не сделал достаточно с L4, но знаю, когда 'associate()' пригодится. Я готов открыть этот вопрос, чтобы узнать, есть ли у кого-то лучшее объяснение/идея. Cheers – Nicolas

+1

Без проблем, может быть, мы оба узнаем что-то. – user3158900

1

Вы можете использовать метод нажимной() вместо того, чтобы, который позволит вам нажать на соответствующие модели.

Эта ссылка должна ответить на ваш запрос. Eloquent push() and save() difference

Смежные вопросы