【问题标题】:How to change fillable variable instance programmatically in Eloquent Model?如何在 Eloquent 模型中以编程方式更改可填充变量实例?
【发布时间】:2019-02-20 05:40:29
【问题描述】:

我想做的是以编程方式更改 $fillable 变量的值。我正在使用 GuardsAttributes 特征的 fillable 方法来设置新的可填充变量。但是,当用户从控制器调用 Model::create 外观时,可填充属性没有更新。

    $model = new Modal();
    $model->fillable(array_merge($model->getFillable(),["new_field"]));

我想要做的是,使用新的可填充属性更新 Post::create 实例。我检查了服务容器,但与在那里触发的模型没有任何相似之处。那么,如何更新当前的 Model 实例?

【问题讨论】:

    标签: laravel eloquent model


    【解决方案1】:

    那是因为$model->fillable() 是一个实例函数:定义在模型的一个实例上;因此,当您更改 $fillable 变量时,您仅在该特定模型实例上更改它。 Model::create() 函数是一个静态函数,仅在模型类上动态定义。

    依次尝试:

    $model = new Model();
    $model->fillable(array_merge($model->getFillable(),["new_field"]));
    $model->fill($your_data)->save();
    

    您可以尝试在应用启动时为类设置 unguarded=true,而不是在每个模型上设置 fillable():

    Model::unguard(true)
    

    【讨论】:

    • 但这很难实现。因为,我从服务提供商那里获得了新的字段,所以我需要开箱即用地注入它们。
    • 我更新了答案,应该适用于最后一行。
    • 而这一次,设置 unguard 有点不安全吧?你认为,设置 unguard 和 append 可填充之间没有区别吗?
    • 是的,它不安全。我将使用 fillable() 函数,但如果您对输入数据有严格控制,unguard() 是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2018-03-23
    • 2015-09-29
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多