From ac1abc4435b7fd17f9b4b595a37a3fe880937607 Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode <123783602+HolgerHatGarKeineNode@users.noreply.github.com> Date: Sun, 14 Jun 2026 01:43:34 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20Replace=20`ilike`/`like`=20with?= =?UTF-8?q?=20`whereLike`=20and=20`orWhereLike`=20across=20views=20and=20r?= =?UTF-8?q?emove=20macros=20for=20cleaner,=20driver-agnostic=20querying?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Providers/AppServiceProvider.php | 17 ----------------- resources/views/livewire/cities/index.blade.php | 2 +- .../views/livewire/courses/index.blade.php | 4 ++-- .../views/livewire/lecturers/index.blade.php | 6 +++--- .../views/livewire/meetups/index.blade.php | 2 +- .../views/livewire/services/index.blade.php | 2 +- resources/views/livewire/venues/index.blade.php | 2 +- 7 files changed, 9 insertions(+), 26 deletions(-) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f6c91ca..d7a1a25 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -5,7 +5,6 @@ namespace App\Providers; use App\Support\Carbon; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Contracts\Auth\Authenticatable; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Events\DiagnosingHealth; use Illuminate\Http\Request; @@ -40,22 +39,6 @@ class AppServiceProvider extends ServiceProvider { $this->configureRateLimiting(); - // Case-insensitive Teilstring-Suche DB-portabel halten: PostgreSQL - // kennt `ilike`, SQLite (lokales Dev / Tests) nicht — dort liefert ein - // hartkodiertes `ilike` einen Syntaxfehler. Auf SQLite ist `like` - // ohnehin case-insensitiv (ASCII), sodass das Produktionsverhalten - // (PostgreSQL/ilike) unverändert bleibt. Verwendung in den API- - // Controllern: ->whereLike('name', "%{$search}%"). - Builder::macro('whereLike', function (string $column, string $value, string $boolean = 'and') { - $operator = $this->getConnection()->getDriverName() === 'pgsql' ? 'ilike' : 'like'; - - return $this->where($column, $operator, $value, $boolean); - }); - - Builder::macro('orWhereLike', function (string $column, string $value) { - return $this->whereLike($column, $value, 'or'); - }); - Gate::define('viewApiDocs', fn (?Authenticatable $user = null): bool => true); // OAuth-2.1-Flow des MCP-Servers (Claude.ai Web-Connector). diff --git a/resources/views/livewire/cities/index.blade.php b/resources/views/livewire/cities/index.blade.php index 1b51222..6502243 100644 --- a/resources/views/livewire/cities/index.blade.php +++ b/resources/views/livewire/cities/index.blade.php @@ -26,7 +26,7 @@ class extends Component { 'cities' => City::query() ->with(['country', 'createdBy']) ->when($this->search, fn($query) - => $query->where('name', 'ilike', '%'.$this->search.'%'), + => $query->whereLike('name', '%'.$this->search.'%'), ) ->whereHas('country', fn($query) => $query->where('countries.code', $this->country)) ->orderBy('name') diff --git a/resources/views/livewire/courses/index.blade.php b/resources/views/livewire/courses/index.blade.php index f238a73..fd66ff0 100644 --- a/resources/views/livewire/courses/index.blade.php +++ b/resources/views/livewire/courses/index.blade.php @@ -29,8 +29,8 @@ class extends Component { ]) ->when($this->search, fn($query) => $query - ->where('name', 'ilike', '%'.$this->search.'%') - ->orWhere('description', 'ilike', '%'.$this->search.'%'), + ->whereLike('name', '%'.$this->search.'%') + ->orWhereLike('description', '%'.$this->search.'%'), ) ->whereHas('courseEvents.venue.city.country', fn($query) => $query->where('countries.code', $this->country)) ->orderByDesc('has_future_events') diff --git a/resources/views/livewire/lecturers/index.blade.php b/resources/views/livewire/lecturers/index.blade.php index 1e25ec0..7c0c23a 100644 --- a/resources/views/livewire/lecturers/index.blade.php +++ b/resources/views/livewire/lecturers/index.blade.php @@ -40,9 +40,9 @@ class extends Component { fn($query) => $query->where('countries.code', $this->country)) ->when($this->search, fn($query) => $query - ->where('name', 'ilike', '%'.$this->search.'%') - ->orWhere('description', 'ilike', '%'.$this->search.'%') - ->orWhere('subtitle', 'ilike', '%'.$this->search.'%'), + ->whereLike('name', '%'.$this->search.'%') + ->orWhereLike('description', '%'.$this->search.'%') + ->orWhereLike('subtitle', '%'.$this->search.'%'), ) ->orderByDesc('has_future_events') ->orderBy('name', 'asc') diff --git a/resources/views/livewire/meetups/index.blade.php b/resources/views/livewire/meetups/index.blade.php index 401d567..a974bb3 100644 --- a/resources/views/livewire/meetups/index.blade.php +++ b/resources/views/livewire/meetups/index.blade.php @@ -40,7 +40,7 @@ class extends Component { $query->whereHas('city.country', fn($query) => $query->where('countries.code', $this->country)) ) ->when($this->search, fn($query) - => $query->where('meetups.name', 'ilike', '%'.$this->search.'%'), + => $query->whereLike('meetups.name', '%'.$this->search.'%'), ) ->orderByDesc('has_future_events') ->orderByRaw('next_event_start ASC NULLS LAST') diff --git a/resources/views/livewire/services/index.blade.php b/resources/views/livewire/services/index.blade.php index 2dafe7f..2cdd5fd 100644 --- a/resources/views/livewire/services/index.blade.php +++ b/resources/views/livewire/services/index.blade.php @@ -32,7 +32,7 @@ class extends Component { return [ 'services' => SelfHostedService::query() ->with('createdBy') - ->when($this->search, fn($q) => $q->where('name', 'ilike', '%'.$this->search.'%')) + ->when($this->search, fn($q) => $q->whereLike('name', '%'.$this->search.'%')) ->when($this->typeFilter, fn($q) => $q->where('type', $this->typeFilter)) ->orderBy('name') ->paginate(15), diff --git a/resources/views/livewire/venues/index.blade.php b/resources/views/livewire/venues/index.blade.php index ef884d2..57dde36 100644 --- a/resources/views/livewire/venues/index.blade.php +++ b/resources/views/livewire/venues/index.blade.php @@ -25,7 +25,7 @@ class extends Component { return [ 'venues' => Venue::with(['city.country', 'createdBy']) ->when($this->search, fn($query) - => $query->where('name', 'ilike', '%'.$this->search.'%'), + => $query->whereLike('name', '%'.$this->search.'%'), ) ->whereHas('city.country', fn($query) => $query->where('countries.code', $this->country)) ->orderBy('name')