Php larvel:orWhereHas()禁用where()?
我想获取表Php larvel:orWhereHas()禁用where()?,php,laravel-5,Php,Laravel 5,我想获取表地址或表机构中有相关行的所有用户。另外,我希望modeIN应该等于MT。我认为下面的查询可以做到这一点,但它不起作用: $users = User::whereHas('addresses') ->orWhereHas('institutes') ->where('modeIN', '=', 'MT') ->get() ->pluck('modeIN'); dd($users);
地址
或表机构
中有相关行的所有用户。另外,我希望modeIN
应该等于MT
。我认为下面的查询可以做到这一点,但它不起作用:
$users = User::whereHas('addresses')
->orWhereHas('institutes')
->where('modeIN', '=', 'MT')
->get()
->pluck('modeIN');
dd($users);
仍有用户列出,其中modeIN
不等于MT
。为什么会发生这种情况?我如何修复它
我现在无法检查此问题,但像这样的问题可以解决吗
$users = User::where('modeIN', 'MT')
->where(function ($query) {
$query->has('addresses')
->orHas('institutes');
})
->pluck('modeIN');
查看实际生成的查询,以及实际构建的and或组合。。。。我想你会发现是
有地址或(有机构和modeIN='MT)
,而不是(有地址或有机构)和modeIN='MT'
expected@MarkBaker因为我没有设置任何大括号,所以在我看来就像有地址或机构和modeIN='MT
。默认逻辑是什么?Laravel是如何读取的?使用OR为您设置大括号的。。。。。如果您不相信标准SQL中的meNote,并且运算符优先级高于或,请查看正在生成的SQL以执行查询