I have a User table that have many TeamMember and each TeamMember have many Order. My query look like this at the moment:
$users = User::select('id', 'username')
->with(['userTeamMembers' => function ($query) {
$query->select('team_lead_id', 'team_member_id')
->withSum('completedOrders', 'amount')
->whereHas('completedOrders');
}])
->whereHas('userTeamMembers.completedOrders')
->get()
->toArray();
The output:
[
{
"id": 1,
"username": "user1",
"user_team_members": [
{
"team_lead_id": 1,
"team_member_id": 19,
"completed_orders_sum_amount": "100.00"
},
{
"team_lead_id": 1,
"team_member_id": 34,
"completed_orders_sum_amount": "200.00"
},
]
},
{
"id": 5,
"username": "user5",
"user_team_members": [
{
"team_lead_id": 5,
"team_member_id": 25,
"completed_orders_sum_amount": "50.00"
},
{
"team_lead_id": 5,
"team_member_id": 67,
"completed_orders_sum_amount": "50.00"
},
]
}
]
But what I'm trying to achieve is a result like below:
[
{
"id": 1,
"username": "user1",
"user_team_members_sum": "300.00"
},
{
"id": 5,
"username": "user5",
"user_team_members_sum": "100.00"
}
]
As you can see, all of the team members total are added together compared to the former output. Is the result like above achievable? My Models are like below:
User Model
class User extends Authenticatable
{
...
public function userTeamMembers()
{
return $this->hasMany(TeamMember::class, 'team_lead_id');
}
}
Team Member Model
class TeamMember extends Model
{
....
public function completedOrders()
{
return $this->hasMany(Order::class, 'user_id', 'team_member_id')->select('user_id', 'amount')->where('status', 1);
}
}