mysql - 将 subselect sql 查询转换为 laravel 查询

标签 mysql laravel

我下面有一个 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/

相关文章:

php - 需要帮助删除 mysql 结果中的重复列

mysql - 满足多种用户偏好的数据库设计?

php - 在 Laravel 中按投票计数对帖子进行排序

Laravel 路由不调用 Controller 的功能

javascript - Ionic 无法打开 Cors

javascript - Laravel:在 View Blade 中解析此 json 数据?

mysql - 如何从 Laravel 中的连接查询中选择特定模型

MySQL 如果不为空

MySQL 下一个/上一个 ids(任意排序顺序)

mysql - 如何在activiti中配置一个mysql数据库?