所以这本书给了我一种精神上的奔跑。我有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
发布于 2021-06-24 22:36:32
您可以在whereHas()
中做到这一点。我希望这就是你想要的
Row::whereHas('rowActivity', function($query) use($requestedUser) {
$query->where('user_id', $requestedUser);
})->get();
https://stackoverflow.com/questions/68117769
复制相似问题