Laravel查询构建器不使用子查询中的where子句

时间:2015-11-10 14:59:13

标签: php mysql laravel query-builder

我有这样的查询:

$q = \DB::table(\DB::raw('('.
    \DB::table('table1')
         ->where('field1', 1)->toSQL()
.') AS rs'));

dd($q->get()); // return []

尽管我必须使用这种方法,但当我删除where子句时,它会正确返回所有记录,但在使用where()时没有任何记录。

我确定field1 = 1时有记录。如果我使用$q->toSQL(),最终的SQL是:

select * from (select * from table1 where field1 = ?) AS rs

当我将此sql粘贴到phpmyadmin时,它返回1条记录。因此,“查询”构建器似乎会导致此问题。

1 个答案:

答案 0 :(得分:0)

自己找到它!我应该使用:

$q1 = Table1Model()::select()->where('field1', 1);

$q2 = \DB::table(\DB::raw('('.
    $q1->toSQL()
.') AS rs'))
->mergeBindings($q1->getQuery());