【问题标题】:Can eloquent ignore irrelevant data in Laravel 4可以雄辩地忽略 Laravel 4 中不相关的数据
【发布时间】:2023-03-12 01:51:01
【问题描述】:

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

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

Input::all() 数组传递给 create 方法时,有什么方法可以让 eloquent 忽略不相关的数据?

附:我知道批量分配不是一个好主意,我只是在这里使用它来简化我的问题。

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    果然可以在模型中使用$fillable 数组来声明允许批量赋值的字段。我相信这是您情况下最充分的解决方案。

    class User extends Eloquent {
    
        protected $fillable = [
            'first_name',
            'last_name',
            'email'
        ];
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          但是,强烈建议不要将 Input::all() 传递给模型。您确实应该在将数据投入模型之前对其进行验证和验证。

          【讨论】:

            猜你喜欢
            • 2019-05-12
            • 1970-01-01
            • 2015-06-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-04
            • 2014-03-26
            • 2020-11-03
            相关资源
            最近更新 更多