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

标签 php mysql laravel orm eloquent

我有 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/

相关文章:

MySQL 相关子查询 : Subquery cant find table from outer query?

mysql - 我想将此查询从 mssql 转换为 mysql

php - 在 Behat/Mink FeatureContext 中使用 Laravel Eloquent

Laravel 未连接到 homestead 数据库

php - 保护服务器上的 xml 文件

php - 如果使用 MySQL IN 语句从数组中找不到匹配项,则返回 0

php - 如何以 .JSON 文件格式存储 MySQL 数据?

php - MYSQL 查询同一字段两次

javascript - 了解 Webpack : why does it add these lines of javascript?

php - 在 SQL 查询中使用 div 值