Filters
Queste classi possono essere applicate sia ai Fields già Esistenti che in quelli Custom.
La struttura di queste classi è sempre la stessa, estendono la classe DatasetFilter
, e implementano due metodi:
apply()
Questo metodo riceverà in input in maniera automatica
Parametro | Descrizione |
---|---|
Builder $builder | Il builder Eloquent sul quale applicare la logica desiderata |
InputFilter $filter | Il valore che si sta cercando via filtro nella Datatable |
Utilizzo e implementazione:
php
public function apply(Builder $builder, InputFilter $filter): Builder
{
$query = RoleUser::query()
->select('role_user.user_id')
->join('roles', 'roles.id', '=', 'role_user.role_id')
->whereRaw($filter->sql('roles.id'), $filter->value());
return $builder->whereIn('users.id', $query);
}
Il metodo ...->sql()
della classe InputFilter
ritornerà la stringa che corrisponde al {colonna} {operatore}
quindi (roles.id =)
.
Il metodo ...->value()
ritornerà il valore scelto dall'utente.
applyGlobal()
Questo metodo riceverà in input in maniera automatica
Parametro | Descrizione |
---|---|
Builder $builder | Il builder Eloquent sul quale applicare la logica desiderata |
string $search | Il valore scritto dall'utente nella barra di ricerca |
Utilizzo e implementazione:
php
public function applyGlobal(Builder $builder, string $search, array $field, array $fields): Builder
{
/** Uso il parametro $search applico una particolare logica per filtrare i dati sul DB*/
$values = LocalUnit::get()
->filter(function(LocalUnit $localUnit) use ($search) {
return \Str::contains(\Str::lower($localUnit->name), \Str::lower($search));
})
->pluck('id')
->all();
$query = Employment::query()
->select('employments.user_id')
->join('contracts', 'contracts.id', '=', 'employments.contract_id')
->whereIn('contracts.local_unit_id', $values);
/** Uso poi i risultati ottenuti come filtro nella query */
return $builder->orWhereIn('users.id', $query);
}