I'm trying to build a small application on laravel-5.4
where I'm having a relational query something like this:
$companies = Company::where('is_client', '=', 1)
// load count on distant model
->with(['interactionSummaries.interaction' => function ($q) {
$q->withCount(['contactsAssociation' => function ($q) {
$q->whereHas('company', function ($q) {
$q->where('type', 'like', 'Investor');
});
}]);
}])
->get();
Now I want to collect all the contact_association_counts
generated from the query and add it to individual company collection For this I'm using pluck
, collapse
and sum
method, but I don't know it is not calculating as desired. Following is the screenshots:
I get list of collection as following:
Now I get the attributes:
Now relational data:
Now interaction data, where the count belongs:
So for this I tried:
$companies = Company::where('is_client', '=', 1)
// load count on distant model
->with(['interactionSummaries.interaction' => function ($q) {
$q->withCount(['contactsAssociation' => function ($q) {
$q->whereHas('company', function ($q) {
$q->where('type', 'like', 'Investor');
});
}]);
}])
->get()
->transform(function ($company) {
$company->contacts_association_count = $company->interactionSummaries
->pluck('interaction.contacts_association_count')
->collapse()
->sum();
return $company;
});
But this is not calculating the counts, all the counts are coming to 0
Help me out in this. Thanks
I believe that your problem is the ->collapse()
seeing your example after the ->pluck('interaction.contacts_association_count')
you should have a flat array as [1,2,3,4,5]
if you apply collapse()
to a flat array it returns a void array []
and the sum of a void array is 0
$companies = Company::where('is_client', '=', 1)
// load count on distant model
->with(['interactionSummaries.interaction' => function ($q) {
$q->withCount(['contactsAssociation' => function ($q) {
$q->whereHas('company', function ($q) {
$q->where('type', 'like', 'Investor');
});
}]);
}])
->get()
->transform(function ($company) {
$company->contacts_association_count = $company->interactionSummaries
->pluck('interaction.contacts_association_count')
//->collapse()
->sum();
return $company;
});
I hope it works... good luck!