Ошибка исключения Laravel - массовое присвоение

Я пытаюсь сохранить несколько строк в таблице, однако мне представляется 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

поэтому нет неправильного написания. Критерии_ид исходят из переменной из недавно сохраненных критериев (см. Код выше forloop).

Любая помощь будет принята с благодарностью.

Ответ 1

Чтобы иметь возможность устанавливать свойства, передавая их конструктору модели, вам нужно указать все необходимые свойства в массиве $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);
}

Ответ 2

обратный того, что сказал лука, "охраняется". Вместо полей с "белым листингом" вы можете просто объявить, которые защищены.

Например:

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

Это было более полезно для меня, потому что меня не волновало большинство полей.

Полученный из документов для Laravel 5.2, но я полагаю, что он работает в более старых версиях.

Чтобы разрешить любые поля, вы можете просто предоставить пустой массив:

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