Ошибка исключения 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(); } 

Моя структура базы данных:

Скриншот

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

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

Related of "Ошибка исключения Laravel – массовое присвоение"

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

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

Например:

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

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

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

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

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