首页 > 解决方案 > 我想使用 Laravel 连接根据条件返回特定数量的记录

问题描述

我正在使用 Laravel 8.0 开发谷歌表单克隆

我的表结构如下:

1 调查

  1. ID
  2. 调查名称
  3. 调查说明
  4. 调查类型
  5. 开始日期
  6. 结束日期

2. 项目

  1. ID
  2. 项目名称
  3. 项目描述
  4. company_id

3. 公司

  1. ID
  2. 公司名称
  3. 公司地址

我编写了代码来返回项目,如下所示:

$projects = \DB::table('projects')
                ->join('companies', 'projects.company_id', '=', 'companies.id')
                ->select('projects.*', 'companies.company_name as company_name',
                    \DB::raw('(SELECT COUNT(*) FROM surveys WHERE DATE(surveys.end_date) < "'.date('Y-m-d').'" AND surveys.project_id = projects.id) as completed_surveys'),
                    \DB::raw('(SELECT COUNT(*) FROM surveys WHERE surveys.project_id = projects.id) as total_surveys') 
                )
                ->paginate(6);

现在我只想返回那些total_surveys = completed_surveys的项目。

请指导我。

提前谢谢。

标签: phplaravel

解决方案


完毕....

下面是我的代码工作......

 $projects = \DB::table('projects')->where(
                \DB::raw('(SELECT COUNT(*) FROM surveys WHERE DATE(surveys.end_date) < "'.date('Y-m-d').'" AND surveys.project_id = projects.id)'),
                \DB::raw('(SELECT COUNT(*) FROM surveys WHERE surveys.project_id = projects.id)')
            )
                ->join('companies', 'projects.company_id', '=', 'companies.id')
                ->select('projects.*', 'companies.company_name as company_name',
                    \DB::raw('(SELECT COUNT(*) FROM surveys WHERE DATE(surveys.end_date) < "'.date('Y-m-d').'" AND surveys.project_id = projects.id) as completed'),
                    \DB::raw('(SELECT COUNT(*) FROM surveys WHERE surveys.project_id = projects.id) as total_surveys') 
                )
                ->paginate(6);

推荐阅读