Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Lars-Janssen's avatar

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

0 likes
2 replies
ssa4141's avatar

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)

  1. Table structure
  • contents(id)
  • categorys(id)
  • contents_categories(id, content_id, category_id)
  1. code public function apply(Request $request, $query, $value) { return $query->whereHas('categories', function($categories) use ($value){ $categories->where('category_id', $value); }); }
Kiddo's avatar

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.