selectRaw('count(1) as total, contact_status_id') ->groupBy('contact_status_id'); if (Landlord::hasTenant('company_id')) { $contacts->where('company_id', Landlord::getTenantId('company_id')); } $contacts = $contacts->get(); $contactStatus = ContactStatus::all(); $grouped = []; $result = []; foreach ($contacts as $contact){ $grouped[$contact->contact_status_id] = $contact->total; } foreach ($contactStatus as $status){ try { $result[$status->id] = isset($grouped[$status->id]) ? $grouped[$status->id] : 0; }catch (\Exception $e){ $result[$status->id] = 0; } } return $result; } /** * Count contact by status * @param $status * @return mixed */ public function countByStatus($status) { $contacts = Contact::query() ->select('contacts.*') ->leftJoin('contacts_dict_status', 'contacts.contact_status_id', '=', 'contacts_dict_status.id') ->where('contacts_dict_status.system_name', $status)->whereNull('contacts.deleted_at'); if (Landlord::hasTenant('company_id')) { $contacts->where('contacts.company_id', Landlord::getTenantId('company_id')); } return $contacts->count(); } }