首页 > 解决方案 > 基于关系组中键的存在的雄辩查询

问题描述

所以这个有点让我在精神上四处奔波。我有Rows、Users 和RowActivity模型。每次用户与行交互时,它都会在行活动表中生成一行,说明用户更改的状态。每行可以有 3-8 个活动条目,每行有一个用户参考。所以我的问题是:我想分析特定用户与之交互的行。所以我想搜索用户 A 并获取他们接触过的所有行。但这样做的唯一方法是查询RowActivity表。

所以查询本质上是这样的:

Row::whereHas('rowActivity')->whereWithin(Collection of RowActivity, user_id = requested-user)->get();

我知道我可以走很长的路并查询RowActivity::where('user_id', $requestedUser)然后根据row_id这些结果的相关性获取所有其他行活动,但我觉得有一种我无法弄清楚的干净方法。

只是为了澄清,行活动用于生成有关哪些用户更改了行的状态以及更改之间的持续时间的报告。因此,我需要获取与一行相关联的所有活动以及用户触摸过的所有行,以便我可以分析他们在该交互中花费了多长时间。

如果我需要将其作为多级查询来执行,就这样吧,我对此没有反感,我只想确保我的查询是原始的。如果我将其作为多级进行,它将如下所示:

$ra = RowActivity::where('user_id', $requestedUser)->pluck('row_id');
$rows = Row::with('rowActivity')->find($ra); //get all rows and their associated activities based on the plucked row id from query 1

标签: phplaraveleloquent

解决方案


您可以在whereHas(). 我希望这就是你想要的

Row::whereHas('rowActivity', function($query) use($requestedUser) {
    $query->where('user_id', $requestedUser);
})->get();

推荐阅读