sobrecarga que ejemplos consultas constructores __construct php laravel laravel-4 eloquent seeding

ejemplos - que es un constructor en php



Constructores en clases que extienden Eloquent (3)

Acabo de comenzar un nuevo sitio web y quería hacer uso de Eloquent. En el proceso de sembrar mi base de datos, noté que agregaría filas vacías si hubiera incluido cualquier tipo de constructor en el modelo que se extiende de manera elocuente. Por ejemplo, ejecutar esta sembradora:

<?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'' ) ); } }

Con esto como mi clase de equipo:

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

Rendimiento esto:

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

Simplemente eliminar el constructor todos juntos permite que la sembradora funcione como se espera. ¿Qué estoy haciendo exactamente mal con el constructor?


Debes llamar a parent::__construct para que todo funcione aquí, si miras al constructor de la clase 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); }

Se llama al método de boot y se establece la propiedad booted . Realmente no sé lo que está haciendo, pero dependiendo de su problema parece relevante: P

Refactorice su constructor para obtener la matriz de attributes y ponerla en el constructor padre.

Actualizar

Aquí está el código necesario:

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


En laravel 3 debe colocar el segundo parámetro ''$ exists'' con el valor predeterminado "falso".

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


Puede usar este método genérico que le permite pasar un parámetro también.

/** * 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... }