我下面有一个 mysql
查询
select * from
( SELECT *,(select count(*) from `comments` where parent_id=b._id) as
cnt FROM `comments` b )x
where ((x.type_user='xxxx' and (cnt>0 or x.is_starter=1))
or(type_user='user' and cnt>=0))
and deleted_at is null and parent_id is null order by created_at desc
我想将其转换为 Laravel 查询。这就是我尝试的
$res=DB::table('comments')
->select(DB::raw('comments.*, (select count(*) from `comments` b where b.parent_id=comments._id) as cnt'));
$res->where(function ($query) {
$query->where('comments.type_user','xxxx')
->where(function ($query1) {
$query1->where('cnt','>',0)
->orWhere('comments.is_starter',1);
});
})->orWhere(function($query) {
$query
->where('comments.type_user','user')
->where('cnt', '>=',0);
});
导致以下错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'cnt' in 'where clause'
请帮忙。提前致谢
最佳答案
Laravel 5.6:
$res = DB::query()
->fromSub(function($query) {
$query->select('*', DB::raw('(select count(*) from `comments` where parent_id=b._id) as cnt'))
->from('comments as b');
}, 'x');
Laravel <5.6:
$res = DB::query()
->from(DB::raw('(SELECT *, (select count(*) from `comments` where parent_id=b._id) as cnt FROM `comments` b) x'));
关于mysql - 将 subselect sql 查询转换为 laravel 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50605976/