查询生成器 - whereRaw with subquery

时间:2015-02-16 13:58:07

标签: php laravel laravel-4 query-builder laravel-5

我需要使用Laravel Query Builder创建以下查询:

SELECT count(*) FROM table WHERE 1 < (SELECT count(*) FROM x WHERE y=2)

问题是 - 是否可以使用查询构建器来完成它?

我能够实现它的唯一原因是:

\DB::table('table')->whereRaw('1 < (SELECT count(*) FROM x WHERE y=2)')->count();

但是这样我需要手动放置子查询并且它生成错误的查询:

SELECT count(*) FROM table WHERE 1 < (SELECT count(*) FROM x WHERE y=2) IS NULL

(最后添加is null

是否可以在此处使用查询构建器进行子查询并使其生成正确的SQL?

2 个答案:

答案 0 :(得分:1)

我找到的唯一解决方案是以这种方式创建单独的查询构建器:

$subQuery = \DB::table('x')->selectRaw('count(*)')->where('y',2);

\DB::table('table')->whereRaw('1 < ('.$subQuery->toSql().')')->addBinding($subQuery->getBindings());

答案 1 :(得分:0)

试试这个

\DB::table('table')->where(DB::raw('SELECT count(*) FROM x WHERE y=2'), '<',1)->count();