如何将具有多个ors的查询转换为雄辩的格式?

时间:2019-03-31 04:23:11

标签: php mysql laravel eloquent

我需要运行此查询,该查询在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的行。它还会返回整行,而不仅仅是返回所请求的字段。

1 个答案:

答案 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上的手册。