在laravel 5.2中遇到了问题.
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)
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的公共表单字段,否则允许所有字段在批量分配上可写是一个安全漏洞.