我有 3 个表:user
、role
和 pivot user_role
。用户和角色之间存在多对多关系。
还有一个细节,每个分配(用户的角色)在 user_role
表中都有 timestamp
,所以我可以找到最近为用户添加了什么角色。
是否有可能编写一个 Eloquent 查询来获取所有最近分配角色的用户,例如 id = 5?
我需要以某种方式从按 timestamp
排序的 pivot
获取最后一条记录,然后在 whereHas
语句中使用它。但是如何获得最后一条记录呢?
编辑
感谢您的回答。但我想让这一切变得更复杂一点。如果我们添加表 system
会怎么样,现在 system
和 user
之间将是一对多的关系,因此用户可以属于一个系统并且系统可以有多个用户。
现在,如何获得例如system
的 id,其中包含具有 id = 5 的最后一个角色的用户(与开头一样)。
最佳答案
首先,您需要确保您的关系包含数据透视时间戳:
public function users()
{
return $this->belongsToMany('User')->withTimestamps();
}
然后您可以在代码中使用以下查询来获取最近获得特定角色(例如 id=5)的所有用户。
$role = Role::with(['users', function($query) {
$query->orderBy('pivot_created_at', 'DESC');
}])->find(5);
// all users with (role_id = 5) ordered by (user_role.created_at DESC)
$users = $role->users;
关于php - Laravel Eloquent 过滤关系按最后一个数据透视记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127366/