Laravel 查询生成器不适用于子查询中的 where 子句
Laravel query builder doesn't work with where clause in subquery
我有这样的查询:
$q = \DB::table(\DB::raw('('.
\DB::table('table1')
->where('field1', 1)->toSQL()
.') AS rs'));
dd($q->get()); // return []
尽管我必须使用这种方法,但当我删除 where
子句时,它 returns 所有记录都正确,但在使用 where()
.
时没有任何记录
我确定field1 = 1
时有记录。如果我使用 $q->toSQL()
最后的 SQL 是:
select * from (select * from table1 where field1 = ?) AS rs
当我将这个 sql 粘贴到 phpmyadmin 时,它 returns 1 条记录。所以似乎是查询生成器导致了这个问题。
自己找的!我应该使用:
$q1 = Table1Model()::select()->where('field1', 1);
$q2 = \DB::table(\DB::raw('('.
$q1->toSQL()
.') AS rs'))
->mergeBindings($q1->getQuery());
我有这样的查询:
$q = \DB::table(\DB::raw('('.
\DB::table('table1')
->where('field1', 1)->toSQL()
.') AS rs'));
dd($q->get()); // return []
尽管我必须使用这种方法,但当我删除 where
子句时,它 returns 所有记录都正确,但在使用 where()
.
我确定field1 = 1
时有记录。如果我使用 $q->toSQL()
最后的 SQL 是:
select * from (select * from table1 where field1 = ?) AS rs
当我将这个 sql 粘贴到 phpmyadmin 时,它 returns 1 条记录。所以似乎是查询生成器导致了这个问题。
自己找的!我应该使用:
$q1 = Table1Model()::select()->where('field1', 1);
$q2 = \DB::table(\DB::raw('('.
$q1->toSQL()
.') AS rs'))
->mergeBindings($q1->getQuery());