Symfony 如何使用Api平台更改最终查询?

Symfony 如何使用Api平台更改最终查询?,symfony,api-platform.com,Symfony,Api Platform.com,对于Api平台和一个实体,我想更改最终查询 我已经知道QueryCollectionExtensionInterface/QueryItemExtensionInterface(),但这只允许访问第一个表(root),而不允许访问连接: final class ConversationExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface { public function

对于Api平台和一个实体,我想更改最终查询

我已经知道
QueryCollectionExtensionInterface
/
QueryItemExtensionInterface
(),但这只允许访问第一个表(
root
),而不允许访问连接:

final class ConversationExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
{

    public function applyToCollection(
        QueryBuilder $queryBuilder,
        QueryNameGeneratorInterface
        $queryNameGenerator,
        string $resourceClass,
        string $operationName = null
    ): void {
        $this->addWhere($queryBuilder, $resourceClass);
    }

    public function applyToItem(
        QueryBuilder $queryBuilder,
        QueryNameGeneratorInterface
        $queryNameGenerator,
        string $resourceClass,
        array $identifiers,
        string $operationName = null,
        array $context = []
    ): void {
        $this->addWhere($queryBuilder, $resourceClass);
    }

    private function addWhere(
        QueryBuilder $queryBuilder,
        string $resourceClass
    ): void {
        if (Conversation::class !== $resourceClass) {
            return;
        }

        dump($queryBuilder); // only root
        ...

也许是一个潜在客户,但我似乎不知道如何访问QueryBuilder以获取所有get(集合和项目)。

我找到了解决问题的方法。我们必须将优先级更改为-8,才能访问整个查询:

App\Extension\ConversationExtension:
    tags:
        - { name: api_platform.doctrine.orm.query_extension.collection, priority: -9 }
        - { name: api_platform.doctrine.orm.query_extension.item, priority: -9 }