Laravel 属于ToMany 获得一条记录
Posted
技术标签:
【中文标题】Laravel 属于ToMany 获得一条记录【英文标题】:Laravel belongsToMany get one record 【发布时间】:2021-08-25 04:24:39 【问题描述】:我有如下三张表:
用户 id|name|用户名|密码
角色 身份证|姓名
users_roles id|user_id|role_id
这些表通过 belongsToMany 进行通信。 表 users_roles 有很多记录。用户可以更改他的角色,但我必须存储每个更改。
id | user_id | role_id |
---|---|---|
1 | 2 | 2 |
1 | 3 | 2 |
1 | 2 | 3 |
第一。如何获取用户的最后一个和单个 role_id?
$users = User::with('roles')->get();
现在我让 user(2) 有两个角色,但我需要 user(2) 有一个角色和最后一个角色(3)。
第二。如何访问刀片上的角色->名称?
@foreach($users as $user)
$user->name <<< normal
$user->roles['name'] <<I'm getting error here
【问题讨论】:
你使用的是什么版本的 Laravel? Laravel 版本为 8.40 【参考方案1】:roles
将是一个collection,所以你可以使用last() 方法并有类似的东西:
$user->roles->last()->name;
或者,如果你可以更新到 Laravel >= 8.42,你可以使用Has one of many relationship。
在您的 User
模型中创建新关系:
public function latestRole()
return $this->hasOne(Role::class)->latestOfMany();
然后您将使用latestRole
加载角色:
$users = User::with('latestRole')->get();
这样你可以直接访问关系:
@foreach($users as $user)
$user->latestRole->name
【讨论】:
如果我错了请纠正我,但latestOfMany
仅适用于 1:N 而不适用于 N:N 关系。否则你会得到Unknown column 'users.role_id' in 'field list'
@Luciano 是的,我相信你是对的。我可能是错的(这可能取决于您的具体情况),但如果您为数据透视表设置了模型,您可以使用hasOneThrough。【参考方案2】:
你可以使用 whereHas
$users = User::with('roles')->whereHas('roles', function ($q)
$q->latest();
)->get();
【讨论】:
以上是关于Laravel 属于ToMany 获得一条记录的主要内容,如果未能解决你的问题,请参考以下文章