我需要运行此查询,该查询在MYSQL中正常工作
SELECT * FROM table WHERE title_id = 4 AND (state_a = 'TRUE' OR state_b = 'TRUE' OR state_c = 'TRUE')
我尝试了以下方法以及其他一些选择,但是看似随机地获得结果。
$values = \App\Time_Code::select('id','title_id','type','state_a','state_b','state_c')
->where('title_id', '=', '4')
->where('state_a', '=', 'TRUE')
->orWhere('state_b', '=', 'TRUE')
->orWhere('state_c', '=', 'TRUE')
->orderBy('updated_at', 'desc')
->get();
我在这里完全走错了方向吗?在这种情况下,它将包括title_ids不是4的行。它还会返回整行,而不仅仅是返回所请求的字段。
答案 0 :(得分:1)
您需要编写一个嵌套查询以反映您在MySQL中的条件嵌套:
$values = \App\Time_Code::select('id','title_id','type','state_a','state_b','state_c')
->where('title_id', '=', '4')
->where(function ($q) {
$q->where('state_a', '=', 'TRUE')
->orWhere('state_b', '=', 'TRUE')
->orWhere('state_c', '=', 'TRUE');
})
->orderBy('updated_at', 'desc')
->get();
请参阅Parameter Grouping上的手册。