Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Please provide a migration path for the ApiFilter attribute => query parameter.

Open
#7,554 21 comments 2 reactions 1 assignee View on GitHub

Maintainers usually reply within 1 day

@soyuka is already working on this.

Since Nov 30, 2025.

Assessment

This issue has not been assessed yet.

Description

Description
Hi @soyuka @vinceAmstoutz

I'm currently trying to migrate my ApiFilter attribute filters to avoid the futur deprecation, as explained in
https://api-platform.com/docs/core/doctrine-filters/#introduction

But I'm currently having big trouble to understand

  • How to migrate some of my filters
  • What's the benefit

And I feel like I'm maybe not the only one, looking at some recent issue/discussions.

Also I think this Upgrade note could explain with more details why this changes, cause currently I didn't found satisfying explanations.
I feel like the ApiFilter attribute will be replaced by

  • The new filters classes (great)
  • Declaring filter in the yaml/php config (why ? I hate having to maintain a config)
  • Creating new dedicated filter (why having to maintain my own filter while ApiPlatform filters was doing the trick ?)

I understand writing doc is difficult and I'm open to do PR to improve it, but first I need to understand it ^^'

Example

I would expect a big list of BEFORE/AFTER example.
I'm unsure how to write it currently, based on the issues I encounter.

Problem I still have
  1. I have an OrderFilter
#[ApiFilter(OrderFilter::class, properties: ['name', 'createdAt'])]

that's I tried to migrated

parameters: ['order[:property]' => new QueryParameter(filter: new OrderFilter(), properties: ['name', 'createdAt'])],

it worked fine BUT got the same issue than https://github.com/api-platform/core/issues/7361

I follow the suggestion from soyuka (https://github.com/api-platform/core/issues/7361#issuecomment-3243315889) to use service id with .instance

parameters: ['order[:property]' => new QueryParameter(filter: 'api_platform.doctrine.orm.order_filter.instance', properties: ['name', 'createdAt'])],

but then the filter does nothing as reported by https://github.com/api-platform/core/issues/7361#issuecomment-3240681163

Looking at https://github.com/api-platform/core/issues/7361#issuecomment-3243835860 I feel like I'll have to declare a new service in my config. Is it the only way ? Is it plan to introduce a new OrderFilter ?

  1. I have a filter with nested property
#[ApiFilter(SearchFilter::class, properties: ['languagePair.target' => 'exact'])]

As reported https://github.com/api-platform/core/pull/7121#issuecomment-3575382644 and answered by soyuka, nested properties are (voluntary) not supported anymore for those filters.
This is already discussed in https://github.com/api-platform/core/issues/7526

Filtering on nested properties requires joins which is hard to predict and may lead to unwanted behavior / performance issues, can't you create your own filter?

I have a big trouble understanding

  • What was the issue before (since it works)
  • How my own filter will avoid this issue (since I'll have to make my own JOIN !)

Wouldn't it be possible to still support nested properties ? Or to do somehting like OrFilter:

new NestedFilter(new ExactFilter())

Also soyuka told me I can still use the legacy (not recommended) SearchFilter but I got the same issue than the OrderFilter, something like

parameters: [
                'targetLanguage' => new QueryParameter(
                    filter: 'api_platform.doctrine.orm.search_filter.instance',
                    property: 'languagePair.target'
                ),
            ]

does nothing...

Problem solved that might help someone else...
  1. I have a BooleanFilter on a live property I tried to migrate to
parameters: ['live' => new QueryParameter(filter: new BooleanFilter(), property: 'live')],

it worked fine BUT got the same issue than https://github.com/api-platform/core/issues/7361

I'm finally solve my issue with

parameters: ['live' => new QueryParameter(filter: new ExactFilter(), property: 'live')],

but I'm not sure of the changes.

  1. I have a SearchFilter
#[ApiFilter(SearchFilter::class, properties: ['name' => 'partial'])]

that I migrated into

parameters: ['name' => new QueryParameter(filter: new PartialSearchFilter(), property: 'name')],

I feel like it's the right way to do it.

Dominant language
PHP
Stars
2.6k
Forks
989
Avg merge
2d 1h
Merged PRs (30d)
104

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from api-platform/core

All issues in api-platform/core

Similar issues

More PHP issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.