gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:43:15 25 4
gpt4 key购买 nike

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

谢谢

最佳答案

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

->belongsTo() 函数是一个反函数 - 但您还没有在 users 表上定义任何东西 - 所以假设反函数是一对多是错误的。

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

class Users extends Eloquent {

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

关于php - Laravel:belongsTo() 关系假定一对多关系而不是一对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17610822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com