Filters
Filters can be used to filter your data. The filters can be used directly in your tableModel and filters the data server side.
<= Go back
Basic example
In this example we will use a drop-down to filter the users. Let’s create a filter to filter deleted users.
In your tableModel
create a function named filter
use SingleQuote\DataTables\Filter\Dropdown;
/**
* Create filters
*
* @return array
*/
public function filter() : array
{
$filter = [
[
'name' => "Without deleted",
"id" => 1
],[
'name' => "With deleted",
"id" => 2
]
];
return [
//the data attribute accepts an array as an object|collection
Dropdown::make('filter')->label("Filter deleted")->data($filter),
];
}
The above will create a dropdown filter above your datatable.
Now let’s use the filter. Create a function named query
in your tableModel
You can call the method $this->getFilter(...)
to retrieve your filters data.
public function query($query)
{
if ($this->getFilter('filter') && (int) $this->getFilter('filter') === 2) {
return $query->withTrashed(); //return with deleted users
}
return $query;
}
Data attribute
The data attribute is used to show the filters. As in the example you can pass an array or object to create your filter. By default the labels name
and id
are used to create the filter. See the options below.
array | object
Pass an array or object to create a filter.
$filter = [
[
'name' => "Without deleted",
"id" => 1
],[
'name' => "With deleted",
"id" => 2
]
];
Dropdown::make('filter')->label("Filter deleted")->data($filter),
Model | collections
By default the method uses the id
as value and the name
as label.
$data = Status::all(); // {id : 1, name : 'invited', etc...}
Dropdown::make('filter')->label("Filter by status")->data($data),
Closure
You can edit the label
or value
with an closure.
$data = Status::all(); // {id : 1, name : 'invited', etc...}
Dropdown::make('filter')->label("Filter by status")->data($data, function($status){
return [
'label' => $status->name,
'value' => $status->id
];
}),