我有3个表: user
, role
和pivot user_role
. 用户和角色之间存在多对多关系 .
还有一个细节,每个作业(用户角色)在 user_role
表中都有 timestamp
,所以我可以找到最近为用户添加了什么角色 .
是否有可能编写一个雄辩的查询来获取 recently 分配角色的所有用户,例如id = 5?
我需要以某种方式从 timestamp
订购 pivot
获取最后一条记录,然后在 whereHas
语句中使用它 . 但如何获得最后的记录?
编辑
谢谢您的回答 . 但我想让它变得更加复杂 . 如果我们添加表 system
现在将是 system
和 user
之间的一对多关系怎么办,所以用户可以属于一个系统,系统可以有多个用户 .
现在,如何获得例如 system
的id,其中包含具有id = 5的最后一个角色的用户(如开头) .
3 回答
您可以为您的关系添加数据透视列,如下所示:
然后,如果你想检查用户最近是否有特定角色,我会这样做
EDIT: 尝试这样的事情 .
如果没有,也许你应该分步工作 . 就像获得具有最新角色5的用户一样,获得至少具有这些用户之一的系统 .
首先,您需要确保您的关系包括透视时间戳:
然后,您可以在代码中使用以下查询来获取最近收到特定角色的所有用户(例如id = 5) .
这给出了
user_role
列中timestamp
列所排序的最后一个用户 .Update:
然后,这给出了在数据透视表中按时间戳排序的所有用户的系统ID .
确保您在用户和角色模型
withPivot.
中有关系,以便您可以使用pivot_timestamps