类扩展 Eloquent 的构造函数

2022-08-30 21:01:52

我刚刚开始一个新的网站,我想利用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

只需将构造函数全部删除即可使播种机按预期工作。我到底在构造函数上做错了什么?


答案 1

如果你看一下类的构造函数,你必须调用才能使事情在这里工作:parent::__constructEloquent

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

        static::$booted[get_class($this)] = true;
    }

    $this->fill($attributes);
}

调用该方法并设置该属性。我真的不知道这在做什么,但根据您的问题,它似乎与:Pbootbooted

重构构造函数以获取数组并将其放入父构造函数。attributes

更新

以下是所需的代码:

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

答案 2

在 laravel 3 中,您必须将第二个参数“$exists”与默认值“false”放在一起。

class Model extends Eloquent {

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

推荐