【发布时间】:2013-07-12 08:39:19
【问题描述】:
我在使用 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 进行相同操作时,它失败了,返回一个错误,说它不能在非对象上调用 name。
但如果我试试这个:
$this->updateUser()->first()->name;
它有效,但我觉得不对。
所以我的问题是,Laravel 的 ORM 如何决定用 belongsTo() 定义的关系是一对一还是一对多?有没有办法强制执行所需的行为?
谢谢
【问题讨论】:
-
您是否使用
hasOne()在其他地方设置关系?你读过documentation吗? -
是的,我已阅读文档。我没有在其他地方使用 hasOne() ,因为单个用户可能是许多页面的更新者,从用户的角度来看这是一对多的关系,但从页面的角度来看是一对一的关系。