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

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

Скриншот

так что нет неправильного правописания. Crit_id_id происходит от переменной из недавно сохраненных критериев (см. Код выше для цикла).

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

13

Решение

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

Другие решения

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

Например:

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

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

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

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

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

По вопросам рекламы [email protected]