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