我正在寻找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')]);
答案 0 :(得分:0)
https://laravel.com/docs/5.7/eloquent-relationships#counting-related-models
我相信您的计数将称为primaryContractOwner_count
和primaryVendorOwner_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