可以雄辩地忽略Laravel 4中不相关的数据

时间:2013-12-16 20:35:12

标签: laravel laravel-4 eloquent

我有一个表单接受将用于创建两个新数据库表条目的数据。表单包含用户详细信息及其地址。用户详细信息将使用User::create(Input::all())方法存储到users表中,地址详细信息将使用Address::create(Input::all())方法存储到数据库的地址表中。

我目前面临的问题是,Eloquent抱怨用户桌上不存在街道,城市,国家等。这是事实,数据将用于事物的地址方。

当传递给create方法时,是否有任何方法可以在Input::all()数组中忽略不相关的数据?

P.S。我知道大规模分配并不是一个好主意,我只是在这里使用它来简化我的问题。

4 个答案:

答案 0 :(得分:3)

当然,您可以在模型中使用$fillable数组来声明允许进行质量分配的字段。我相信这是你案件中最充分的解决方案。

class User extends Eloquent {

    protected $fillable = [
        'first_name',
        'last_name',
        'email'
    ];
}

答案 1 :(得分:2)

您是否尝试过查看Input::only('field1','field2',...);,甚至是Input::except('field3')?他们应该能够完成你想要的东西。

来源:http://laravel.com/docs/requests

答案 2 :(得分:0)

您必须使用这些http://laravel.com/docs/eloquent#mass-assignment来保护该模型,然后在执行save()之前手动取消设置这些值。我强烈建议您使用表单对象或类似的东西,以便在模型之外为您完成此类服务,因为它更安全,通常更清晰。

答案 3 :(得分:0)

@cheelahim是正确的,当将数组传递给Model :: create()时,将忽略不在Model :: fillable中的所有额外值。

但是,强烈推荐您不会将Input :: all()传递给模型。在将数据投入模型之前,您确实应该验证并验证数据。