我有一个表单接受将用于创建两个新数据库表条目的数据。表单包含用户详细信息及其地址。用户详细信息将使用User::create(Input::all())
方法存储到users表中,地址详细信息将使用Address::create(Input::all())
方法存储到数据库的地址表中。
我目前面临的问题是,Eloquent抱怨用户桌上不存在街道,城市,国家等。这是事实,数据将用于事物的地址方。
当传递给create方法时,是否有任何方法可以在Input::all()
数组中忽略不相关的数据?
P.S。我知道大规模分配并不是一个好主意,我只是在这里使用它来简化我的问题。
答案 0 :(得分:3)
当然,您可以在模型中使用$fillable
数组来声明允许进行质量分配的字段。我相信这是你案件中最充分的解决方案。
class User extends Eloquent {
protected $fillable = [
'first_name',
'last_name',
'email'
];
}
答案 1 :(得分:2)
您是否尝试过查看Input::only('field1','field2',...);
,甚至是Input::except('field3')
?他们应该能够完成你想要的东西。
答案 2 :(得分:0)
您必须使用这些http://laravel.com/docs/eloquent#mass-assignment来保护该模型,然后在执行save()
之前手动取消设置这些值。我强烈建议您使用表单对象或类似的东西,以便在模型之外为您完成此类服务,因为它更安全,通常更清晰。
答案 3 :(得分:0)
@cheelahim是正确的,当将数组传递给Model :: create()时,将忽略不在Model :: fillable中的所有额外值。
但是,强烈推荐您不会将Input :: all()传递给模型。在将数据投入模型之前,您确实应该验证并验证数据。