php - 基于关系组中键的存在的雄辩查询
问题描述
所以这个有点让我在精神上四处奔波。我有Row
s、User
s 和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
解决方案
您可以在whereHas()
. 我希望这就是你想要的
Row::whereHas('rowActivity', function($query) use($requestedUser) {
$query->where('user_id', $requestedUser);
})->get();
推荐阅读
- python - 如何在pyautogui中单击图像中心
- vue.js - Vue Nuxt 滚动到不同的页面
- python - Matplotlob:绘制开区间,将线连接到空圆
- flutter - 如何在 Flutter 的 SliverAppBar 中的flexibleSpace 中移动动作和标题?
- amazon-cloudformation - aws cloudformation:Engine版本升级时如何防止Aurora RDS被替换?
- java - 如何使用相同或更低的 DPI 在 Java 中调整图像大小
- sharepoint - 从 Excel 更新列表项
- angular - 如何在角度 6 中获取材料步进器的加载事件
- java - Java Scanner hasNext() 跳过空行
- android - Android 9 不保存代理信息