Laravel Nova filter only on pivot table
Hi,
I've got a project in my Nova app that BelongsToMany Employees. I use a pivot table for that, on that pivot table is a value is_project_manager.
Is it possible to add a filter on this (can't find it in the docs)?
Thanks
see this(in your filter file).
public function apply(Request $request, $query, $value)
{
return $query->whereHas('categories', function($categories) use ($value){
$categories->where('category_id', $value);
});
}
for example(Content <-> Category Many to Many relationship)
- Table structure
- contents(id)
- categorys(id)
- contents_categories(id, content_id, category_id)
- code
public function apply(Request $request, $query, $value)
{
return $query->whereHas('categories', function($categories) use ($value){
$categories->where('category_id', $value);
});
}
Hi~ Do you resolve it?I've a same problem with you.
I think that maybe helpful
// Filter
class IsEnabled extends BooleanFilter
{
protected $tablePrefix;
public function __construct(?string $table = '')
{
$this->tablePrefix = empty($table) ? '' : "{$table}.";
}
public function apply(Request $request, $query, $value)
{
if ($value['enabled']) {
return $query->where($this->tablePrefix.'is_enabled', $value['enabled']);
}
return $query;
}
}
// Resource
class Employee extends Resource
{
public static $model = \App\Models\Employee ::class;
public function fields(Request $request)
{
return [
ID::make()->sortable(),
BelongsToMany::make(__('Projects'), 'projects', Project::class)
->fields(new EmployeeProjectFields)
->searchable(),
];
}
public function filters(Request $request)
{
return [
new Filters\IsEnabled, // filter self model, employees table
new Filters\IsEnabled('employee_project'), // filter pivot, employee_project table
];
}
}
Please or to participate in this conversation.