Я пытаюсь сохранить несколько строк в таблице, однако мне представлена 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).
Любая помощь будет принята с благодарностью.
Чтобы иметь возможность устанавливать свойства, передавая их конструктору модели, вам нужно указать все необходимые свойства в массиве $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 = []; }