Laravel-使用withCount()获得多个SUM

时间:2018-12-17 20:32:07

标签: mysql laravel

我正在寻找Eloquent或原始sql,以获取两个->withCount的和。我需要能够无需执行此操作,而不必->get()记录,它需要使用口才而不是幼稚的Collection方法来实现。

我有以下内容:

$owners = User::active()
     ->where(function($q){
         $q->whereHas('primaryContractOwner')
         ->orWhereHas('primaryVendorOwner');
     })
     ->withCount([
         'primaryContractOwner',
         'primaryVendorOwner'
     ]);

我需要获得primary_contract_owner个计数和primary_vendor_owner个计数的总和。我尝试了以下操作,但找不到primary_contract_owner_count

// This one throws the error
$owners = User::active()
     ->where(function($q){
         $q->whereHas('primaryContractOwner')
         ->orWhereHas('primaryVendorOwner');
     })
     ->withCount([
         'primaryContractOwner',
         'primaryVendorOwner'
     ])
     ->select(['user.*', DB::raw('primary_contract_owner_count + primary_vendor_owner')]);

2 个答案:

答案 0 :(得分:0)

https://laravel.com/docs/5.7/eloquent-relationships#counting-related-models

我相信您的计数将称为primaryContractOwner_countprimaryVendorOwner_count。您可以在没有DB :: raw部分的情况下运行查询。

答案 1 :(得分:0)

您可以如下使用收集方法reduce

$owners->reduce(function($carry,$item){
  return $carry+$item->primaryContractOwner_counter;
},0);

有关更多信息,请查看reduce文档:https://laravel.com/docs/6.x/collections#method-reduce