Конструкторы классов, расширяющих Eloquent

Я только что начал новый сайт, и я хотел использовать Eloquent. В процессе посева моей базы данных я заметил, что я получаю пустые строки, добавленные, если бы включил в модель какой-либо конструктор, который расширяет красноречивость. Например, запуск этой сеялки:

<?php class TeamTableSeeder extends Seeder { public function run() { DB::table('tm_team')->delete(); Team::create(array( 'city' => 'Minneapolis', 'state' => 'MN', 'country' => 'USA', 'name' => 'Twins' ) ); Team::create(array( 'city' => 'Detroit', 'state' => 'MI', 'country' => 'USA', 'name' => 'Tigers' ) ); } } 

С этим, как с моим классом Team:

 <?php class Team extends Eloquent { protected $table = 'tm_team'; protected $primaryKey = 'team_id'; public function Team(){ // null } } 

Допускается:

 team_id | city | state | country | name | created_at | updated_at | deleted_at 1 | | | | | 2013-06-02 00:29:31 | 2013-06-02 00:29:31 | NULL 2 | | | | | 2013-06-02 00:29:31 | 2013-06-02 00:29:31 | NULL 

Простое удаление конструктора вместе позволяет сеялке работать должным образом. Что именно я делаю неправильно с конструктором?

Вы должны вызвать parent::__construct чтобы заставить все работать здесь, если вы посмотрите на конструктор класса Eloquent :

 public function __construct(array $attributes = array()) { if ( ! isset(static::$booted[get_class($this)])) { static::boot(); static::$booted[get_class($this)] = true; } $this->fill($attributes); } 

boot метод boot и устанавливается booted свойство. Я действительно не знаю, что это делает, но в зависимости от вашей проблемы кажется актуальным: P

Рефакторируйте свой конструктор, чтобы получить массив attributes и поместите его в родительский конструктор.

Обновить

Вот нужный код:

 class MyModel extends Eloquent { public function __construct($attributes = array()) { parent::__construct($attributes); // Eloquent // Your construct code. } } 

В laravel 3 вы должны поместить второй параметр «$ exists» со значением по умолчанию «false».

 class Model extends Eloquent { public function __construct($attr = array(), $exists = false) { parent::__construct($attr, $exists); //other sentences... } } 

Вы можете использовать этот общий метод, который также позволяет передавать параметр.

 /** * Overload model constructor. * * $value sets a Team's value (Optional) */ public function __construct($value = null, array $attributes = array()) { parent::__construct($attributes); $this->value = $value; // Do other staff... }