我对Laravel的ORM有一个乏味的问题。
我有一个具有多种关系的模型,如下所示:
class Pages extends Eloquent {
protected $guarded = array('id','config_id');
public function template()
{
return $this->belongsTo('Templates', 'templates_id');
}
public function updateUser()
{
return $this->belongsTo('Users', 'updated_by');
}
现在我可以通过简单的方式访问模板相关项目,如下所示:
$this->template->name;
并且它起作用了,因为Laravel的ORM假定它是一对一的关系,并在内部调用first()方法。
但是当我尝试使用updateUser时,它会失败,返回错误,说它无法在非对象上调用名称。
但如果我试试这个:
$this->updateUser()->first()->name;
它有效,但对我来说感觉不对。
所以我的问题是,Laravel的ORM如何决定与belongsTo()定义的关系是一对一还是一对多?有没有办法强迫所需的行为?
由于
答案 0 :(得分:3)
您需要定义关系。您可以在透视图上定义“不同”关系。
->belongsTo()
函数是一个反函数 - 但你没有在users表中定义任何东西 - 所以错误地认为逆是一对多。
只需将此添加到您的用户类:
class Users extends Eloquent {
public function pages()
{
return $this->hasMany('Pages');
}
}