Метод заполнения в Laravel не работает?

Я изучаю, как использовать Laravel framework, но у меня возникают проблемы с заполнением модели. Вот мой код:

Модельное Event :

 <?php class Event extends Eloquent { //Some functions not used yet } 

И вот код в контроллере:

 $event = new Event(); $event->fill(array('foo', 'bar')); print_r($event->attributes); 

Итак, почему print_r отображает пустой массив?

Атрибуты являются защищенным свойством. Используйте метод $ obj-> getAttributes () .

На самом деле. сначала вы должны изменить название модели из Event на что-то еще, у Laravel есть класс Facade как Illuminate\Support\Facades\Event так что это может быть проблемой.

Что касается метода fill , вы должны передать ассоциативный массив для fill метода, например:

 $obj = new MyModel; $obj->fill(array('fieldname1' => 'value', 'fieldname2' => 'value')); 

Также убедитесь, что у вас есть protected $fillable свойство protected $fillable ( check mass assign ), объявленное в вашей Model с именами свойств, которые разрешены для заполнения. Вы также можете сделать то же самое при инициализации Model :

 $properties = array('fieldname1' => 'value', 'fieldname2' => 'value'); $obj = new ModelName($properties); 

Наконец, позвоните:

 // Instead of attributes dd($obj->getAttributes()); 

Поскольку attributes являются защищенным свойством.

Также убедитесь, что свойство $ fillable определено в вашем классе модели. Например, в вашей новой переименованной модели:

 /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['field1', 'field2']; 

Если у вас нет либо $ fillable, либо $ protected, определенных в вашей модели, fill () не будет устанавливать никаких значений. Это делается для того, чтобы модель не была распределена по массе. См. «Массовое присвоение» в документах Laravel Eloquent: http://laravel.com/docs/5.1/eloquent .

При заполнении атрибутов обязательно используйте ассоциативный массив:

 $event->fill(array('field1' => 'val1', 'field2' => 'val2')); 

Полезный способ отладки и проверки всех ваших значений:

 //This will var_dump the variable's data and exit the function so no other code is executed dd($event); 

Надеюсь это поможет!

Используйте массив key / value в fill:

Пример:

 $book->fill(array( 'title' => 'A title', 'author' => 'An author' )); 

В Laravel 5.x,

Когда вы хотите создать новую строку:

 $model = App\ModelName::create($arr); 

Когда вы хотите обновить существующую строку:

 $model = App\ModelName::find($id); $model->fill($arr); 

Все допустимые атрибуты существуют в переменной модели $fillable .