我有这些表格:
用户
id
name
事件
id
name
项
id
user_id
event_id
如何让所有没有event_id
4条目的用户
使用此代码:
$users = User::query();
$users->leftJoin('entries', 'users.id', '=', 'entries.user_id')
->where('event_id','!=', $event_id)->get();
我仍然会收到已经拥有该特定事件条目的用户。
这就是我想要的:
$entries = Entry::where(event_id, '=', 4)->get();
foreach ($entries as &$entry) {
//remove all entries from $entries array which "user_id = $entry->user_id"
}
如何通过查询完成上述操作?
答案 0 :(得分:0)
接下来的问题是答案,但我想这不是你最终想要的。如此详细,并指定样本输入和输出数据集
select * from your_table where event_id <> 4;
答案 1 :(得分:0)
您想要的SQL是:
select user_id
from t
group by user_id
having sum(event_id = 4) = 0;
答案 2 :(得分:0)
select u.*
from User u
left join entries e
on e.user_id = u.id and e.event_id = 4
where e.id is null
答案 3 :(得分:0)
您正在寻找<>
,而不是!=
。此外,您还不知道哪个表event_id
正在使用。
尝试
$users = User::query();
$users->leftJoin('entries', 'users.id', '=', 'entries.user_id')
->where('entries.event_id','<>', $event_id)->get();
找到更多信息
答案 4 :(得分:0)
您可以使用whereDoesntHave
构建器方法。
$users = User::query()->whereDoesntHave("entry", function($q) use ($event_id) {
$q->where('id', $event_id);
})->get();
该方法采用闭包,您可以在其中定义必须不存在的相关实体的条件。
如果您需要用户和条目,我认为您仍然可以使用with
加入条目。
$users = User::query()
->with('entries')
->whereDoesntHave("entry", function($q) use ($event_id) {
$q->where('id', $event_id); })
->get();