mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
filters added
This commit is contained in:
@@ -34,9 +34,12 @@ class Header extends Component
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.frontend.header', [
|
||||
'cities' => City::query()
|
||||
->select(['latitude', 'longitude'])
|
||||
->get(),
|
||||
'cities' => City::query()
|
||||
->select(['latitude', 'longitude'])
|
||||
->get(),
|
||||
'countries' => Country::query()
|
||||
->select(['code', 'name'])
|
||||
->get(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,4 +66,17 @@ class CourseTable extends DataTableComponent
|
||||
->whereHas('events.venue.city.country',
|
||||
fn($query) => $query->where('countries.code', $this->country));
|
||||
}
|
||||
|
||||
public function courseSearch($id)
|
||||
{
|
||||
return to_route('search.event', [
|
||||
'#table',
|
||||
'country' => $this->country,
|
||||
'table' => [
|
||||
'filters' => [
|
||||
'course_id' => $id,
|
||||
],
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,10 +4,12 @@ namespace App\Http\Livewire\Tables;
|
||||
|
||||
use App\Models\Category;
|
||||
use App\Models\Event;
|
||||
use App\Models\Lecturer;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Rappasoft\LaravelLivewireTables\DataTableComponent;
|
||||
use Rappasoft\LaravelLivewireTables\Views\Column;
|
||||
use Rappasoft\LaravelLivewireTables\Views\Filters\MultiSelectFilter;
|
||||
use Rappasoft\LaravelLivewireTables\Views\Filters\SelectFilter;
|
||||
use Rappasoft\LaravelLivewireTables\Views\Filters\TextFilter;
|
||||
|
||||
class EventTable extends DataTableComponent
|
||||
@@ -54,15 +56,35 @@ class EventTable extends DataTableComponent
|
||||
$builder
|
||||
->whereHas('venue.city',
|
||||
function ($query) use ($value) {
|
||||
foreach (str($value)->explode(',') as $item) {
|
||||
$query->orWhere('cities.name', 'ilike', "%$item%");
|
||||
}
|
||||
$query->whereIn('cities.name', str($value)->explode(','));
|
||||
});
|
||||
} else {
|
||||
$builder->whereHas('venue.city',
|
||||
fn($query) => $query->where('cities.name', 'ilike', "%$value%"));
|
||||
}
|
||||
}),
|
||||
TextFilter::make('Veranstaltungs-Ort', 'venue')
|
||||
->config([
|
||||
'placeholder' => __('Suche Veranstaltungs-Ort'),
|
||||
])
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereHas('venue',
|
||||
fn($query) => $query->where('venues.name', 'ilike', "%$value%"));
|
||||
}),
|
||||
TextFilter::make('Kurs')
|
||||
->config([
|
||||
'placeholder' => __('Suche Kurs'),
|
||||
])
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereHas('course',
|
||||
fn($query) => $query->where('courses.name', 'ilike', "%$value%"));
|
||||
}),
|
||||
TextFilter::make('Kurs by ID', 'course_id')
|
||||
->hiddenFromMenus()
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereHas('course',
|
||||
fn($query) => $query->where('courses.id', '=', $value));
|
||||
}),
|
||||
MultiSelectFilter::make('Art')
|
||||
->options(
|
||||
Category::query()
|
||||
@@ -73,6 +95,16 @@ class EventTable extends DataTableComponent
|
||||
$builder->whereHas('course.categories',
|
||||
fn($query) => $query->whereIn('categories.id', $values));
|
||||
}),
|
||||
SelectFilter::make('Dozent')
|
||||
->options(
|
||||
Lecturer::query()
|
||||
->pluck('name', 'id')
|
||||
->toArray()
|
||||
)
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereHas('course.lecturer',
|
||||
fn($query) => $query->where('lecturers.id', $value));
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ use Rappasoft\LaravelLivewireTables\Views\Columns\ImageColumn;
|
||||
|
||||
class LecturerTable extends DataTableComponent
|
||||
{
|
||||
public string $country;
|
||||
protected $model = Lecturer::class;
|
||||
|
||||
public function configure(): void
|
||||
@@ -66,4 +67,19 @@ class LecturerTable extends DataTableComponent
|
||||
'courses',
|
||||
]);
|
||||
}
|
||||
|
||||
public function lecturerSearch($id)
|
||||
{
|
||||
$lecturer = Lecturer::query()->find($id);
|
||||
|
||||
return to_route('search.event', [
|
||||
'#table',
|
||||
'country' => $this->country,
|
||||
'table' => [
|
||||
'filters' => [
|
||||
'dozent' => $lecturer->id,
|
||||
],
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,4 +67,19 @@ class VenueTable extends DataTableComponent
|
||||
])
|
||||
->whereHas('city.country', fn($query) => $query->where('code', $this->country));
|
||||
}
|
||||
|
||||
public function venueSearch($id)
|
||||
{
|
||||
$venue = Venue::query()->find($id);
|
||||
|
||||
return to_route('search.event', [
|
||||
'#table',
|
||||
'country' => $this->country,
|
||||
'table' => [
|
||||
'filters' => [
|
||||
'venue' => $venue->name,
|
||||
],
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user