将联合与laravel结合使用时如何获得两个不同表的总和

Posted

技术标签:

【中文标题】将联合与laravel结合使用时如何获得两个不同表的总和【英文标题】:How to get sum of two different table when using union with laravel 【发布时间】:2021-07-07 09:47:36 【问题描述】:

我的代码是这样的

 $docManual = DB::table('document_manuals')
                    ->whereYear('document_manuals.created_at', $monthYear)
                    ->whereMonth('document_manuals.created_at', '=', $monthly)
                    ->select('document_manuals.format_type', DB::raw('count(*) as total'))
                    ->groupBy('document_manuals.format_type');
                    

                $format = DB::table('documents')
                    ->whereYear('documents.created_at', $monthYear)
                    ->whereMonth('documents.created_at', '=', $monthly)
                    ->select('.documents.format_type', DB::raw('count(*) as total'))
                    ->groupBy('documents.format_type')
                    ->unionAll($docManual)
                    ->get();

输出

Illuminate\Support\Collection #1676 ▼
  #items: array:4 [▼
    0 => #1679 ▼
      +"format_type": "pdf"
      +"total": 1
    
    1 => #1682 ▼
      +"format_type": "ppt"
      +"total": 1
    
    2 => #1678 ▼
      +"format_type": "doc"
      +"total": 1
    
    3 => #1684 ▼
      +"format_type": "pdf"
      +"total": 2
    
  ]


我想让输出看起来像这样

Illuminate\Support\Collection #1676 ▼
  #items: array:4 [▼
    0 => #1679 ▼
      +"format_type": "pdf"
      +"total": 3
    
    1 => #1682 ▼
      +"format_type": "ppt"
      +"total": 1
    
    2 => #1678 ▼
      +"format_type": "doc"
      +"total": 1
    
  ]

问题是如何使用 UNION 将项目与两个表组合和求和?为了更清楚,我有两个表,数据是:

first table : document_manuals
pdf : 1

second table : documents
pdf : 2
ppt : 1
doc : 1

所以有人知道如何组合它们以使输出看起来像我想要的吗?

【问题讨论】:

【参考方案1】:

        $data = collect([
            ['format_type' => 'pdf', 'total' => 1],
            ['format_type' => 'ppt', 'total' => 1],
            ['format_type' => 'doc', 'total' => 1],
            ['format_type' => 'pdf', 'total' => 2],
        ]);
        $result = collect([]);
        $data->groupBy('format_type')->map(function ($item, $key) use ($result) 
            $result->push((object)['format_type' => $key, 'total' => $item->sum('total')]);
        );
        dd($result->toArray());

【讨论】:

以上是关于将联合与laravel结合使用时如何获得两个不同表的总和的主要内容,如果未能解决你的问题,请参考以下文章

如何使用雄辩的 Laravel 获得两个表的总和和组响应?

如何使用 laravel 查询生成器从表联合的结果中选择列?

无法使用 laravel 5.5 建立 laravel 关系

laravel 关联查询 表一、表二、两个表的关联表

如何在drupal 7中更改视图查询并添加联合本身

EXCEL两个表如何通过关联合并