我刚开始一个新网站,我想利用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
只需将构造函数一起移除,就可以使播种机按预期工作。究竟我在构造函数中做错了什么?
答案 0 :(得分:26)
如果你看一下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.
}
}
答案 1 :(得分:1)
在laravel 3中,您必须输入第二个参数&#39; $ exists&#39;默认值 &#34;假&#34;
class Model extends Eloquent {
public function __construct($attr = array(), $exists = false) {
parent::__construct($attr, $exists);
//other sentences...
}
}
答案 2 :(得分: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...
}