From 14408ef18f0c3f0de65aa40aae7a286acd9b2dd5 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 8 Sep 2025 13:55:22 +0100 Subject: [PATCH 1/3] Fixed n+1 in top menu check Signed-off-by: snipe --- app/Helpers/Helper.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 5e954a24c5..c0b31b8ac1 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -811,12 +811,11 @@ class Helper } } - foreach ($asset_models as $asset_model){ - $asset = new Asset(); - $total_owned = $asset->where('model_id', '=', $asset_model->id)->count(); - $avail = $asset->where('model_id', '=', $asset_model->id)->whereNull('assigned_to')->count(); + $total_owned = Asset::whereIn('model_id', $asset_models->pluck('id'))->count(); + $avail = Asset::whereIn('model_id', $asset_models->pluck('id'))->whereNull('assigned_to')->count(); + foreach ($asset_models as $asset_model) { if ($avail < ($asset_model->min_amt) + $alert_threshold) { if ($avail > 0) { $percent = number_format((($avail / $total_owned) * 100), 0); From b95b60b49ef33bc204ab7bbcb3a3b3f5792914f1 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 8 Sep 2025 14:07:49 +0100 Subject: [PATCH 2/3] Use eager-loaded model assets Signed-off-by: snipe --- app/Helpers/Helper.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index c0b31b8ac1..220313e429 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -748,7 +748,7 @@ class Helper $consumables = Consumable::withCount('consumableAssignments as consumable_assignments_count')->whereNotNull('min_amt')->get(); $accessories = Accessory::withCount('checkouts as checkouts_count')->whereNotNull('min_amt')->get(); $components = Component::whereNotNull('min_amt')->get(); - $asset_models = AssetModel::where('min_amt', '>', 0)->get(); + $asset_models = AssetModel::where('min_amt', '>', 0)->with('assets')->get(); $licenses = License::where('min_amt', '>', 0)->get(); $items_array = []; @@ -812,10 +812,13 @@ class Helper } - $total_owned = Asset::whereIn('model_id', $asset_models->pluck('id'))->count(); - $avail = Asset::whereIn('model_id', $asset_models->pluck('id'))->whereNull('assigned_to')->count(); + foreach ($asset_models as $asset_model) { + + $total_owned = $asset_model->assets->count(); + $avail = $asset_model->assets->whereNull('assigned_to')->count(); + if ($avail < ($asset_model->min_amt) + $alert_threshold) { if ($avail > 0) { $percent = number_format((($avail / $total_owned) * 100), 0); From 5a9c906eb9bf380dd1bc334ee9547b953e743a97 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 8 Sep 2025 14:32:58 +0100 Subject: [PATCH 3/3] Added filter to assets loading Signed-off-by: snipe --- app/Helpers/Helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 220313e429..ba7e6fe9b4 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -817,7 +817,7 @@ class Helper foreach ($asset_models as $asset_model) { $total_owned = $asset_model->assets->count(); - $avail = $asset_model->assets->whereNull('assigned_to')->count(); + $avail = $asset_model->assets->whereNull('assets.assigned_to')->count(); if ($avail < ($asset_model->min_amt) + $alert_threshold) { if ($avail > 0) {