我正在尝试获取allParticipants
数组中不存在的用户列表,但其名称,电子邮件或用户名与input
匹配。以下是我尝试过的
User::where('username', $input)
->orWhere('email', $input)
->orWhere('name', 'LIKE', '%' . $input . '%')
->whereNotIn('id', $allParticipants)->get()->toJson()->get();
但是,上面的方法将返回一个名称与输入匹配的用户列表,无论它们是否存在于allParticipants
数组中。编写此查询的正确方法是什么。
答案 0 :(得分:0)
检查您的查询:
您告诉Laravel获得 [A] 不在特定参与者组中的用户列表 OR [B] 具有特定email
的用户 OR [C] 具有特定name
的用户..因此,翻译为:< / p>
[A] OR [B] OR [C]
这就是为什么当Laravel找到与提供的电子邮件匹配的user
电子邮件时,无论是否属于该特定组($appParticipants
)的电子邮件,它都会返回。
要获得所需的行为,您应该改为执行以下操作:
User::where('username', $input)
->whereNotIn('id', $allParticipants)
->where(function ($query) use ($input) {
$query
->where('email', $input)
->orWhere('name', 'LIKE', '%' . $input . '%');
})
->get()
->toJson()
->get();
这将执行以下操作:
[A] 检查ID不在$allParticipants
数组中的用户 AND 遵循下一条规则: [B] 具有特定的email
或 [C] 具有特定的name
。
[A] AND ([B] OR [C])