Я изучаю, как использовать 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
.