From cb0d774e0c952bb5be9483d497616f16550829fa Mon Sep 17 00:00:00 2001 From: Benjamin Takats Date: Thu, 19 Jan 2023 13:36:13 +0100 Subject: [PATCH] subquery --- app/Http/Livewire/Tables/MeetupTable.php | 22 +++++++++++++--------- app/Models/MeetupUser.php | 10 ++++++++++ 2 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 app/Models/MeetupUser.php diff --git a/app/Http/Livewire/Tables/MeetupTable.php b/app/Http/Livewire/Tables/MeetupTable.php index 9da9d6f0..f145a07d 100644 --- a/app/Http/Livewire/Tables/MeetupTable.php +++ b/app/Http/Livewire/Tables/MeetupTable.php @@ -3,6 +3,8 @@ namespace App\Http\Livewire\Tables; use App\Models\Meetup; +use App\Models\MeetupEvent; +use App\Models\MeetupUser; use Illuminate\Database\Eloquent\Builder; use Rappasoft\LaravelLivewireTables\DataTableComponent; use Rappasoft\LaravelLivewireTables\Views\Column; @@ -16,8 +18,8 @@ class MeetupTable extends DataTableComponent public function configure(): void { $this->setPrimaryKey('id') + ->setDebugEnabled() ->setAdditionalSelects(['id', 'slug']) - ->setDefaultSort('meetup_events_count', 'desc') ->setThAttributes(function (Column $column) { return [ 'class' => 'px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:bg-gray-800 dark:text-gray-400', @@ -32,12 +34,6 @@ class MeetupTable extends DataTableComponent }) ->setColumnSelectStatus(false) ->setPerPage(10); - - if ($this->country) { - $this->setDefaultSort('meetup_events_count', 'desc'); - } else { - $this->setDefaultSort('users_count', 'desc'); - } } public function filters(): array @@ -87,8 +83,16 @@ class MeetupTable extends DataTableComponent 'meetupEvents' => fn($query) => $query->where('start', '>=', now()), ]) - ->when($this->country, - fn($query) => $query->orderBy('meetup_events_count', 'desc')); + ->when(!$this->country, fn($query) => $query->orderBy( + MeetupUser::select('meetup_id') + ->whereColumn('meetup_id', 'meetups.id') + )) + ->when($this->country, fn($query) => $query->orderBy( + MeetupEvent::select('start') + ->whereColumn('meetup_id', 'meetups.id') + ->where('start', '>=', now()) + ->orderBy('start') + )); } public function meetupEventSearch($id) diff --git a/app/Models/MeetupUser.php b/app/Models/MeetupUser.php new file mode 100644 index 00000000..8c319388 --- /dev/null +++ b/app/Models/MeetupUser.php @@ -0,0 +1,10 @@ +