Custom table query, lost when i'm using custom filters,
For some reason when I use some filters on my table, the query for that filter is loosing the main query of the table, am I doing something wrong or I've understood wrong how filters queries works?
2 Replies
We would need to see the code to know if you are doing something wrong..
this is my table query method
this is my filters code
return User::query()
->select('departament.id as id_departament', 'users.id as id', 'users.nume as nume', 'users.email as email',
'departament.nume as nume_departament', 'tu.locatie as locatie', 'pc.trimis as planificare_trimis_status')
->leftJoin('team_user as tu', 'users.id', '=', 'tu.user_id') // Join team_user table
->leftJoin('plan_concediu as pc', function ($join) {
$join->on('users.id', '=', 'pc.id_user')
->where('pc.team_id', Filament::getTenant()->id)
->where('pc.anul', '=', $this->anu);
})
return User::query()
->select('departament.id as id_departament', 'users.id as id', 'users.nume as nume', 'users.email as email',
'departament.nume as nume_departament', 'tu.locatie as locatie', 'pc.trimis as planificare_trimis_status')
->leftJoin('team_user as tu', 'users.id', '=', 'tu.user_id') // Join team_user table
->leftJoin('plan_concediu as pc', function ($join) {
$join->on('users.id', '=', 'pc.id_user')
->where('pc.team_id', Filament::getTenant()->id)
->where('pc.anul', '=', $this->anu);
})
protected function getTableFilters(): array
{
return [
SelectFilter::make('disabled')
->indicateUsing(function (array $data) {
$indicators = [];
if($data['an'] !== null) {
$indicators['an'] = Indicator::make('Anul: '.$data['an']) ;
}
return $indicators;
})
->label('Status')
->form([
Select::make('an')
->searchable()
->afterStateUpdated(function ($state) {
$this->an = $state;
})
->options(function () {
$currentYear = date('Y');
$options = [];
for ($i = $currentYear; $i >= 2021; $i--) {
$options[$i] = $i;
}
return $options;
}),
])
->query(function (Builder $query, array $data): Builder {
return $query->when(
$data['an'],
fn (Builder $query, $an): Builder => $query->leftJoin('plan_concediu as pc', function ($join) use ($data) {
$join->on('users.id', '=', 'pc.id_user')
->where('pc.team_id', $this->teamId)
->where('pc.anul', '=', data['an']);
}),
);
})
];
}
protected function getTableFilters(): array
{
return [
SelectFilter::make('disabled')
->indicateUsing(function (array $data) {
$indicators = [];
if($data['an'] !== null) {
$indicators['an'] = Indicator::make('Anul: '.$data['an']) ;
}
return $indicators;
})
->label('Status')
->form([
Select::make('an')
->searchable()
->afterStateUpdated(function ($state) {
$this->an = $state;
})
->options(function () {
$currentYear = date('Y');
$options = [];
for ($i = $currentYear; $i >= 2021; $i--) {
$options[$i] = $i;
}
return $options;
}),
])
->query(function (Builder $query, array $data): Builder {
return $query->when(
$data['an'],
fn (Builder $query, $an): Builder => $query->leftJoin('plan_concediu as pc', function ($join) use ($data) {
$join->on('users.id', '=', 'pc.id_user')
->where('pc.team_id', $this->teamId)
->where('pc.anul', '=', data['an']);
}),
);
})
];
}