From 791cab77b903b596ce8c6e24a857fe1a885630b5 Mon Sep 17 00:00:00 2001 From: Benjamin Takats Date: Thu, 1 Dec 2022 22:42:49 +0100 Subject: [PATCH] table counts added --- app/Http/Livewire/Tables/CityTable.php | 10 +++++++--- app/Http/Livewire/Tables/CourseTable.php | 5 ++++- app/Http/Livewire/Tables/LecturerTable.php | 7 +++++-- app/Http/Livewire/Tables/VenueTable.php | 9 +++++++-- app/Models/City.php | 10 ++++++++++ app/Models/Lecturer.php | 5 +++++ app/Models/Venue.php | 5 +++++ 7 files changed, 43 insertions(+), 8 deletions(-) diff --git a/app/Http/Livewire/Tables/CityTable.php b/app/Http/Livewire/Tables/CityTable.php index 3b8c8c31..b350ed77 100644 --- a/app/Http/Livewire/Tables/CityTable.php +++ b/app/Http/Livewire/Tables/CityTable.php @@ -30,11 +30,11 @@ class CityTable extends DataTableComponent ->searchable(), Column::make('Veranstaltungs-Orte') ->label( - fn($row, Column $column) => random_int(0, 100) + fn($row, Column $column) => $row->venues_count ), - Column::make('Kurse') + Column::make('Termine') ->label( - fn($row, Column $column) => random_int(0, 100) + fn($row, Column $column) => $row->events_count ), Column::make('') ->label( @@ -46,6 +46,10 @@ class CityTable extends DataTableComponent public function builder(): Builder { return City::query() + ->withCount([ + 'venues', + 'events', + ]) ->whereHas('country', fn($query) => $query->where('code', $this->country)); } diff --git a/app/Http/Livewire/Tables/CourseTable.php b/app/Http/Livewire/Tables/CourseTable.php index 88ef71a2..b07e6615 100644 --- a/app/Http/Livewire/Tables/CourseTable.php +++ b/app/Http/Livewire/Tables/CourseTable.php @@ -27,7 +27,7 @@ class CourseTable extends DataTableComponent ->sortable(), Column::make("Termine") ->label( - fn($row, Column $column) => ''.$row->events->count().'' + fn($row, Column $column) => ''.$row->events_count.'' ) ->html() ->sortable(), @@ -43,6 +43,9 @@ class CourseTable extends DataTableComponent public function builder(): Builder { return Course::query() + ->withCount([ + 'events', + ]) ->whereHas('events.venue.city.country', fn($query) => $query->where('countries.code', $this->country)); } diff --git a/app/Http/Livewire/Tables/LecturerTable.php b/app/Http/Livewire/Tables/LecturerTable.php index e06a81cb..ef5dd1e9 100644 --- a/app/Http/Livewire/Tables/LecturerTable.php +++ b/app/Http/Livewire/Tables/LecturerTable.php @@ -35,7 +35,7 @@ class LecturerTable extends DataTableComponent ->sortable(), Column::make('Kurse') ->label( - fn($row, Column $column) => random_int(0, 100) + fn($row, Column $column) => $row->courses_count ), Column::make('') ->label( @@ -47,6 +47,9 @@ class LecturerTable extends DataTableComponent public function builder(): Builder { - return Lecturer::query(); + return Lecturer::query() + ->withCount([ + 'courses', + ]); } } diff --git a/app/Http/Livewire/Tables/VenueTable.php b/app/Http/Livewire/Tables/VenueTable.php index 25cb169f..4a936675 100644 --- a/app/Http/Livewire/Tables/VenueTable.php +++ b/app/Http/Livewire/Tables/VenueTable.php @@ -21,12 +21,14 @@ class VenueTable extends DataTableComponent public function columns(): array { return [ - Column::make("City id", "city_id") - ->sortable(), Column::make("Name", "name") ->sortable(), Column::make("Street", "street") ->sortable(), + Column::make('Termine') + ->label( + fn($row, Column $column) => $row->events_count + ), Column::make('') ->label( fn($row, Column $column) => view('columns.venues.action')->withRow($row) @@ -37,6 +39,9 @@ class VenueTable extends DataTableComponent public function builder(): Builder { return Venue::query() + ->withCount([ + 'events', + ]) ->whereHas('city.country', fn($query) => $query->where('code', $this->country)); } } diff --git a/app/Models/City.php b/app/Models/City.php index 0192fb8a..9f17e36f 100644 --- a/app/Models/City.php +++ b/app/Models/City.php @@ -44,4 +44,14 @@ class City extends Model { return $this->belongsTo(Country::class); } + + public function venues(): \Illuminate\Database\Eloquent\Relations\HasMany + { + return $this->hasMany(Venue::class); + } + + function events() + { + return $this->hasManyThrough(Event::class, Venue::class); + } } diff --git a/app/Models/Lecturer.php b/app/Models/Lecturer.php index d56ea5e4..f3e70cb7 100644 --- a/app/Models/Lecturer.php +++ b/app/Models/Lecturer.php @@ -43,4 +43,9 @@ class Lecturer extends Model { return $this->belongsTo(Team::class); } + + public function courses(): \Illuminate\Database\Eloquent\Relations\HasMany + { + return $this->hasMany(Course::class); + } } diff --git a/app/Models/Venue.php b/app/Models/Venue.php index 9a7defc3..1fd7040a 100644 --- a/app/Models/Venue.php +++ b/app/Models/Venue.php @@ -42,4 +42,9 @@ class Venue extends Model { return $this->belongsTo(City::class); } + + public function events(): \Illuminate\Database\Eloquent\Relations\HasMany + { + return $this->hasMany(Event::class); + } }