From 294d0f08e8c31ffb14dfdc22d003cfe981579bd1 Mon Sep 17 00:00:00 2001 From: Raziul Islam <51883557+iRaziul@users.noreply.github.com> Date: Thu, 26 Dec 2024 17:57:21 +0600 Subject: [PATCH 1/2] optimize query on `location` method --- src/Models/Menu.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Models/Menu.php b/src/Models/Menu.php index eb5ac65..2092389 100644 --- a/src/Models/Menu.php +++ b/src/Models/Menu.php @@ -52,9 +52,10 @@ public function menuItems(): HasMany public static function location(string $location): ?self { - return FilamentMenuBuilderPlugin::get() - ->getMenuLocationModel()::with(['menu' => fn (Builder $query) => $query->where('is_visible', true)]) - ->where('location', $location) - ->first()?->menu; + return self::query() + ->where('is_visible', true) + ->whereRelation('locations', 'location', $location) + ->with('menuItems') + ->first(); } } From fcec82cd3ce6c3875dc53a6c4ac11559e0009bdd Mon Sep 17 00:00:00 2001 From: Raziul Islam <51883557+iRaziul@users.noreply.github.com> Date: Fri, 27 Dec 2024 00:01:15 +0600 Subject: [PATCH 2/2] fix duplicate db queries --- src/Concerns/HasLocationAction.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Concerns/HasLocationAction.php b/src/Concerns/HasLocationAction.php index 1478506..a93c20f 100644 --- a/src/Concerns/HasLocationAction.php +++ b/src/Concerns/HasLocationAction.php @@ -13,6 +13,8 @@ trait HasLocationAction { + protected ?Collection $menus = null; + protected ?Collection $menuLocations = null; public function getLocationAction(): Action @@ -70,7 +72,7 @@ public function getLocationAction(): Action ->label(__('filament-menu-builder::menu-builder.actions.locations.form.menu.label')) ->searchable() ->hiddenLabel($key !== $this->getRegisteredLocations()->keys()->first()) - ->options($this->getModel()::all()->pluck('name', 'id')->all()), + ->options($this->getMenus()->pluck('name', 'id')->all()), ]), )->all() ?: [ Components\View::make('filament-tables::components.empty-state.index') @@ -81,6 +83,11 @@ public function getLocationAction(): Action ]); } + protected function getMenus(): Collection + { + return $this->menus ??= FilamentMenuBuilderPlugin::get()->getMenuModel()::all(); + } + protected function getMenuLocations(): Collection { return $this->menuLocations ??= FilamentMenuBuilderPlugin::get()->getMenuLocationModel()::all();