php – Laravel Dynamic Fillable in Models

在laravel 5.2中遇到了问题.

以下是eloquent创建操作(后调用)期间的错误,

Model.php 453中的批量分配异常:column_name

以下是要考虑的先决条件:

>模型中的Fillables通过以下代码以动态方式填充:

public function __construct() {
     $this->fillable(\Schema::getColumnListing($this->getTable()))
}

以下是到目前为止调试的方法:

>在插入之前,在控制器中,$model :: getillableField(),给出适当的可填充数组.
>在model.php行(450)中,

if ($this->isFillable($key)) {
      $this->setAttribute($key, $value);
}

上面的代码返回值为“false”,$model :: getFillableField()在数组列表中有column_name.
>使用表格列硬编码$fillable变量可以删除错误.
请帮忙,我哪里出错了,解决方案是什么?

提前致谢.

最佳答案
你真正想做的是让所有字段都可填写.

在Laravel中执行此操作的正确方法是:

protected $guarded = [];

这适用于5.2,即使它的文档在5.3中找到.

(relevant source code for 5.2)

(Documentation from 5.3):

If you would like to make all attributes mass assignable, you may define the $guarded property as an empty array:

通过将$guarded设置为空数组,您将创建一个空的黑名单,允许所有字段都是可批量分配的.

此外,如果此模型将直接由用户输入构建,请不要这样做. Laravel要求定义$fillable或$guarded是有原因的.除非您的模型具有字面上1:1的公共表单字段,否则允许所有字段在批量分配上可写是一个安全漏洞.

转载注明原文:php – Laravel Dynamic Fillable in Models - 代码日志