Laravel - 批量分配异常错误

2022-08-30 22:42:18

我正在尝试将多行保存到表中,但是,我看到一个.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();
    }

我的数据库结构是:

screenshot

所以没有任何不正确的拼写。criteria_id来自最近保存的条件中的变量(请参阅上面的 forloop 代码)。

任何帮助将不胜感激。


答案 1

为了能够通过将属性传递给模型的构造函数来设置属性,您需要在数组中列出所需的所有属性。如文档中所述$fillable

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);
}

答案 2

卢卡斯所说的相反是“谨慎”。您可以只声明哪些字段受到保护,而不是“白名单”字段。

例如:

class Bedroom extends Model
{
    protected $guarded = ['id'];
}

这对我来说更有用,因为我并不真正关心大多数领域。

从Laravel 5.2的文档中获取,但我认为它适用于旧版本。

要允许任何字段,您只需提供一个空数组:

class Bedroom extends Model
{
    protected $guarded = [];
}

推荐