19

新しいウェブサイトを立ち上げたばかりで、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'
            )
        );
    }

}

これを私のチームクラスとして:

<?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

コンストラクタをまとめて削除するだけで、シーダが期待どおりに機能するようになります。コンストラクターで正確に何が間違っていますか?

4

4 に答える 4

30

クラス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メソッドが呼び出され、プロパティbootedが設定されます。これが何をしているのかはよくわかりませんが、問題によっては関連しているようです:P

コンストラクターをリファクタリングしてattributes配列を取得し、それを親コンストラクターに配置します。

アップデート

必要なコードは次のとおりです。

class MyModel extends Eloquent {
    public function __construct($attributes = array())  {
        parent::__construct($attributes); // Eloquent
        // Your construct code.
    }
}
于 2013-06-03T05:27:41.153 に答える
0

パラメータも渡すことができるこの汎用メソッドを使用できます。

/**
* 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...    
}
于 2017-04-27T08:27:26.870 に答える