Edit:
I dont think its the same issue as:
https://stackoverflow.com/questions/40022929/laravel-relationship-error-undefined-property-illuminate-database-eloquent-col
because in that issue hasMany relationship is used which returns an array but i used belongsTo which should return a certain object.
我有一个数据库结构,其中我有一个用户和公司之间的多对多关系表。为此,我有一个交叉引用表company_user。此外,每个用户在公司中都有一定的角色,因此交叉引用表也有role_id。问题是,由于某种原因,当我试图从交叉引用表中检索角色时,我会出现异常。
以下是我如何定义公司模型中的关系:
public function users() {
return $this->belongsToMany('App\User')->withPivot('role_id')->using('App\CompanyUser');
}
现在,如果我只是尝试从pivot获取角色id,一切都会正常工作:
@foreach($company->users as $user)
{{$user->pivot->role_id}} // this displays correct role_id
@endforeach
但是我还需要角色的数据,所以我在自定义透视中定义了一个关系。以下是整个模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;
class CompanyUser extends Pivot
{
public function role()
{
return $this->belongsTo('App\Role');
}
}
我试着这样访问它:
@foreach($company->users as $user)
{{$user->pivot->role()->id}}
@endforeach
但这给了我一个例外:
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$id
我错过了什么?
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$id
它告诉您,您正试图访问属于构建器实例上的$id属性,而不是实际的相关模型。
差别很小,但值得理解,因为它会让你的生活更快乐。
这将直接调用role()
方法,并准确返回您在定义中看到的内容。访问此方法对于聚合函数非常方便—例如获取HasMany或BelongToMany关系的相关记录计数。例如:$user-
这实际上将从数据库中检索相关记录,并为您水合它,从而为您提供相关雄辩模型的力量,并将其列作为属性访问。: D
您可以通过深入Laravel的源代码并查看
illighted\Database\Eloquent\Model
类来了解其工作原理。特别是getAttribute()
方法。
试着改变成
@foreach($company->users as $user)
{{$user->pivot->role->id}}
@endforeach
希望你今天过得愉快。 我用的是Laravel 8。我有三个模型,我需要这些模型“纠缠”,可以说。 所以,我有三个基本的表 null null 我最后的方法是查询保存的自定义枢轴模型,并附加模型,但我想先问一下是否有更干净、更有说服力的方法来实现这一点。 任何建议都有帮助。提前感谢您慢慢来。
问题内容: 我希望能够在加载Laravel / Eloquent模型时为其添加自定义属性/属性,类似于使用RedBean的 方法可以实现的那样。 例如,目前,在我的控制器中,我有: 能够省略循环并已经设置并填充了“ available”属性将是很好的选择。 我尝试使用文档中描述的一些模型事件在对象加载时附加此属性,但到目前为止还没有成功。 笔记: “可用”不是基础表中的字段。 是作为JSON对象作
有没有可能通过使用属性在Laravel模型上延迟加载自定义属性,而不必每次都加载它?我正在寻找一种类似于你们可以懒散地加载雄辩的关系的方式。 例如,给定模型上的这个访问器方法: 我希望能够做这样的事情: 这个问题与在加载时向Laravel/Elount模型添加自定义属性不同吗?因为它希望在每次模型加载时加载一个自定义属性,所以我希望仅在指定时延迟加载该属性。 我想我可以为模型实例分配一个与自定义属
我想执行每个产品的平均评级,存储在数据透视表中称为“评论”。下面是我现有的代码。 产品型号: 用户模型: 审查的迁移 我试图使用下面的代码构造预期的输出,但它导致了N+1个问题,因为它没有利用Laravel口才的急切加载。 预期产出:
我在连接Laravel中的数据库模型时遇到问题。 现在,我想把它们连接起来,就像,每个用户可以有多个公司,每个公司都有自己的company_details。 我的用户。php模型如下所示: 如何从company_details表中获取值?
我有如下表格和: 我的型号分类如下:和: 这样做