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

英格罗

我在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如何确定用EmiratesTo()定义的关系是一对一还是一对多?有没有办法强迫必要的行为?

谢谢

劳伦斯

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

->belongsTo()函数是一个逆函数-但是您尚未在users表上定义任何东西-因此错误地假设逆是一对多。

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

class Users extends Eloquent {

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章