laravel中的子查询

时间:2019-03-20 09:14:25

标签: laravel

我需要协助来建立如下所示的laravel查询:

SELECT * 
FROM table t 
WHERE t.a = 1 
  OR (t.a=0 
    AND t.id IN (
      SELECT o.a_id 
      FROM other_table o 
      WHERE o.x > 3
    )
  );

1 个答案:

答案 0 :(得分:1)

您可以尝试构建确切的当前查询,实际上,编写它甚至可能是最有效的。但是,如果我们使用左联接重新定义您的查询,则使用Laravel代码表达起来会变得更加容易。

SELECT *
FROM your_table t
LEFT JOIN other_table o
    ON t.id = o.a_id AND o.x > 3
WHERE
    t.a = 1 OR
    (t.a = 0 AND o.a_id IS NOT NULL);

这将转换为以下Laravel代码:

$result = DB::table('your_table t')
    ->leftJoin('other_table o', function($join) {
        $join->on('t.id', '=', 'o.a_id');
        $join->on('o.x', '>', '3');
    })
    ->where('t.a', '=', '1')
    ->orWhere(function($query) {
        return $query->where('t.a', '=', '0')
            ->whereNotNull('o.a_id')
        })
    ->get();