Laravel:belongsTo()关系假定一对多关系而不是一对一关系

时间:2013-07-12 08:39:19

标签: php orm laravel

我对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()定义的关系是一对一还是一对多?有没有办法强迫所需的行为?

由于

1 个答案:

答案 0 :(得分:3)

您需要定义关系。您可以在透视图上定义“不同”关系。

->belongsTo()函数是一个反函数 - 但你没有在users表中定义任何东西 - 所以错误地认为逆是一对多。

只需将此添加到您的用户类:

class Users extends Eloquent {

    public function pages()
    {
        return $this->hasMany('Pages');
    }
}