gpt4 book ai didi

Laravel Eloquent -总在哪里

转载 作者:行者123 更新时间:2023-12-03 16:30:23 25 4
gpt4 key购买 nike

Laravel 4.2 中,我试图实现一个查询,该查询返回具有所有特定事件的所有用户。到目前为止,我有一个查询,该查询返回具有许多事件之一的所有用户:

//$selectedActivities being an array
$userByActivities = User::with('activities')
->whereHas('activities', function($query) use($selectedActivities){
$query->whereIn('id', $selectedActivities);
})->get();

更明确地说:给定事件a,b,c。我正在寻找所有具有事件“a AND b AND c”的用户。我的查询返回所有事件为a或b或c的用户。

感谢您的帮助。

编辑:

lukasgeiter提供的解决方案导致以下查询:
select * from `users` where 
(select count(*) from `activities` inner join `activity_user` on `activities`.`id` = `activity_user`.`activity_id` where `activity_user`.`user_id` = `users`.`id` and `id` = '7') >= 1
and (select count(*) from `activities` inner join `activity_user` on `activities`.`id` = `activity_user`.`activity_id` where `activity_user`.`user_id` = `users`.`id` and `id` = '3') >= 1
and (select count(*) from `activities` inner join `activity_user` on `activities`.`id` = `activity_user`.`activity_id` where `activity_user`.`user_id` = `users`.`id` and `id` = '1') >= 1
and (select count(*) from `activities` inner join `activity_user` on `activities`.`id` = `activity_user`.`activity_id` where `activity_user`.`user_id` = `users`.`id` and `id` = '2') >= 1

Jarek Tkaczyk提供的解决方案:
$userByActivities = User::with('activities')
->whereHas('activities', function($query) use($selectedActivities) {
$query->selectRaw('count(distinct id)')->whereIn('id', $selectedActivities);
}, '=', count($selectedActivities))->get();

对于类似的请求,将导致以下查询:
select * from `users` where (select count(distinct id) from `activities` 
inner join `activity_user` on `activities`.`id` = `activity_user`.`activity_id`
where `activity_user`.`user_id` = `users`.`id` and `id` in ('7', '3', '1', '2')) = 4

最佳答案

您必须为此添加多个whereHas:

$query = User::with('activities');
foreach($selectedActivities as $activityId){
$query->whereHas('activities', function($q) use ($activityId){
$q->where('id', $activityId);
});
}
$userByActivities = $query->get();

关于Laravel Eloquent -总在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28633389/

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