From 6f1de4531e521153894280a37f0f24141917713b Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Sun, 2 Nov 2025 15:46:50 +0500 Subject: [PATCH] fix bug with ordering on pgsql --- .../CardOrders/Schemas/CardOrderForm.php | 20 +++------------ app/Providers/AppServiceProvider.php | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/app/Filament/Clusters/Cards/CardOrders/Schemas/CardOrderForm.php b/app/Filament/Clusters/Cards/CardOrders/Schemas/CardOrderForm.php index 2251a3d..24e662f 100644 --- a/app/Filament/Clusters/Cards/CardOrders/Schemas/CardOrderForm.php +++ b/app/Filament/Clusters/Cards/CardOrders/Schemas/CardOrderForm.php @@ -61,13 +61,13 @@ class CardOrderForm Fieldset::make(__('Loan type and amount')) ->schema([ Select::make('card_state_id') - ->relationship('cardState', 'name', fn (Builder $query) => $query) + ->relationship('cardState', 'name', fn (Builder $query) => $query->orderByTranslation('name')) ->label(__('Card state')) ->native(false) ->required(), Select::make('card_type_id') - ->relationship('cardType', 'name') + ->relationship('cardType', 'name', fn (Builder $query) => $query->orderByTranslation('name')) ->label(__('Card type')) ->native(false) ->required(), @@ -85,6 +85,8 @@ class CardOrderForm Select::make('branch_id') ->label(__('Branch')) ->relationship('branch', 'name', function ($query, callable $get) { + $query->orderByTranslation('name'); + $region = $get('region'); if ($region) { $query->where('region', $region); @@ -249,20 +251,6 @@ class CardOrderForm ->columnSpan(2), ])->columnSpan(4), ])->columnSpanFull(), - - // Textarea::make('passport_one') - // ->required() - // ->columnSpanFull(), - // Textarea::make('passport_two') - // ->required() - // ->columnSpanFull(), - // Textarea::make('passport_three') - // ->required() - // ->columnSpanFull(), - // Textarea::make('passport_four') - // ->required() - // ->columnSpanFull(), - ]); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 598fb11..c15b2f4 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,8 +4,10 @@ namespace App\Providers; use AbdulmajeedJamaan\FilamentTranslatableTabs\TranslatableTabs; use Illuminate\Contracts\Foundation\Application; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\ServiceProvider; +use Spatie\Translatable\HasTranslations; class AppServiceProvider extends ServiceProvider { @@ -30,5 +32,28 @@ class AppServiceProvider extends ServiceProvider ->localesLabels(baseLocales()) ->locales(array_keys(baseLocales())); }); + + /** + * Order by translation for spatie/laravel-translatable + * + * @param string $field + * @param string $order + * @param string $locale + * @return \Illuminate\Database\Eloquent\Builder + */ + Builder::macro('orderByTranslation', function (string $field, string $order = 'asc', ?string $locale = null) { + if ( + in_array(HasTranslations::class, class_uses($this->model)) + && in_array($field, $this->model->translatable) + && config('database.default') === 'pgsql' + ) { + $locale = $locale ?? app()->getLocale(); + $this->query->orderByRaw("$field->>'$locale' $order"); + } else { + $this->query->orderBy($field, $order); + } + + return $this; + }); } }