在Laravel 4中保存具有多个外键的模型

时间:2014-03-06 11:21:36

标签: laravel laravel-4 save eloquent belongs-to

据我所知,为了保存外键,应该使用相关模型和associate()函数,但是真的值得经历这个

$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());

我觉得我在这里遗漏了一些东西,也许在控制器(和视图)中处理外键的方式更简单,更简洁?

2 个答案:

答案 0 :(得分:1)

您可以使用push()方法,这样可以推送到相关模型。

此链接应该回答您的问题。 Eloquent push() and save() difference

答案 1 :(得分:0)

我真的没有看到做User::create(Input::all());的任何错误。

显然你需要一些验证,但它正在做同样的事情。

我认为associate()方法对于你的情况的倒数更有用。

例如,假设您有一个表单,用户可以填写该表单以将其城市添加到您的应用中,并且一旦这样做,它们就会自动分配到该城市。

$city = City::create(Input::all());只会达到您要求的前半部分,因为用户尚未附加,因为城市没有user_id列。

然后你需要做$city->user()->associate(User::find(Auth::user()->id));

之类的事情