我正在尝试将多行保存到表中,但是,我看到的是Mass Assignment Error
。
错误是:Illuminate \ Database \ Eloquent \ MassAssignmentException criteria_id
$criteria->save();
$criteria_id = $criteria->id;
foreach(Input::get('bedrooms') as $bedroom){
$new_bedroom=array(
'criteria_id' => $criteria->id,
'bedroom' => $bedroom,
);
$bedroom = new Bedroom($new_bedroom);
$bedroom->save();
}
我的数据库结构是:
所以拼写没有错误。 criteria_id来自最近保存的标准中的变量(参见上面的代码forloop)。
非常感谢任何帮助。
答案 0 :(得分:38)
为了能够通过将属性传递给模型的构造函数来设置属性,您需要列出$fillable
数组中所需的所有属性。如Docs
class Bedroom extends Eloquent {
protected $fillable = array('criteria_id', 'bedroom');
}
如果需要,您也可以使用create
方法。它创建了一个新模型并直接保存:
foreach(Input::get('bedrooms') as $bedroom){
$new_bedroom=array(
'criteria_id' => $criteria->id,
'bedroom' => $bedroom,
);
$bedroom = Bedroom::create($new_bedroom);
}
答案 1 :(得分:12)
lukas所说的逆是"守卫"。而不是"白名单"你可以宣告哪些是守卫的。
例如:
class Bedroom extends Model
{
protected $guarded = ['id'];
}
这对我来说更有用,因为我并不关心大多数领域。
从Laravel 5.2的文档中获取,但我认为它适用于旧版本。
要允许任何字段,您只需提供一个空数组:
class Bedroom extends Model
{
protected $guarded = [];
}
答案 2 :(得分:0)
在要在表中存储数据的模型中编写代码。
假设您的桌子是卧室,并且您创建的模型是位于app
文件夹中的卧室。
在这种情况下,您必须将数据存储在$criteria_id
和$bedroom
中,因此您应该按照以下方式将这两个字段添加到模型中。
class Bedroom extends Model
{
protected $fillable = ['criteria_id', 'bedroom'];
}