在Laravel的Left Join中获得结果计数

时间:2019-06-24 14:44:51

标签: laravel query-builder

我正在做一个左联接,我想从一个表中获取数据以及另一个表的ID出现次数,我有一个表:

'tab_areas_atuacoes'

这是专业的专业,我有桌子

'tab_medicos_as_area_atuacao'

是具有每个专业人员的所有专业的表,其中每个专业人员可以具有多个专业。

我想从'tab_areas_atuacoes'获取数据,我想获取每个专业人员拥有的专业数量,但是我没有得到结果。有人可以给我一些想法吗?到目前为止,我有这个:

DB::table('tab_areas_atuacoes')                         
   ->whereNull('deleted_at')
   ->leftJoin('tab_medicos_as_areas_de_atuacao', function($query){
        $query->on('tab_medicos_as_areas_de_atuacao.rel_area_atuacao_id', 'tab_areas_atuacoes.esp_id');
        $query->selectRaw('tab_medicos_as_areas_de_atuacao.*, count(tab_medicos_as_areas_de_atuacao.rel_area_atuacao_id) as total');                                                                                 
   })->select('esp_id', 'esp_data', 'esp_titulo', 'esp_status', 'deleted_at')->groupBy('tab_areas_atuacoes.esp_id');    

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

恐怕我不太了解结构,因此这里涉及一些猜测。您在联接中有一个选择,我不确定您是否实际上是在尝试将所有这些列添加到结果集中。您可以将所需的所有列添加到初始选择中,也可以稍后通过addSelect()调用添加其他列。

DB::table('tab_areas_atuacoes')
  ->select(
    'esp_id',
    'esp_data',
    'esp_titulo',
    'esp_status',
    'deleted_at',
    DB::raw(
      'COUNT(tab_medicos_as_areas_de_atuacao.rel_area_atuacao_id) AS total'
    )
  )->leftJoin(
    'tab_medicos_as_areas_de_atuacao',
    'tab_medicos_as_areas_de_atuacao.rel_area_atuacao_id',
    '=',
    'tab_areas_atuacoes.esp_id'
  )->whereNull('deleted_at')
  ->groupBy('tab_areas_atuacoes.esp_id'));