gpt4 book ai didi

php - Laravel Eloquent 过滤关系按最后一个数据透视记录

转载 作者:行者123 更新时间:2023-11-29 04:16:54 24 4
gpt4 key购买 nike

我有 3 个表:userrole 和 pivot user_role。用户和角色之间存在多对多关系。

还有一个细节,每个分配(用户的角色)在 user_role 表中都有 timestamp,所以我可以找到最近为用户添加了什么角色。

是否有可能编写一个 Eloquent 查询来获取所有最近分配角色的用户,例如 id = 5?

我需要以某种方式从按 timestamp 排序的 pivot 获取最后一条记录,然后在 whereHas 语句中使用它。但是如何获得最后一条记录呢?

编辑

感谢您的回答。但我想让这一切变得更复杂一点。如果我们添加表 system 会怎么样,现在 systemuser 之间将是一对多的关系,因此用户可以属于一个系统并且系统可以有多个用户。

现在,如何获得例如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/

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