微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用 Api 平台更改 Doctrine 最终查询?

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

我已经知道 QueryCollectionExtensionInterface / QueryItemExtensionInterface (documentation) 但这只允许访问第一个表 (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,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
        ...

也许 filters一个潜在客户,但我似乎无法弄清楚如何访问所有获取(集合和项目)的 QueryBuilder。

解决方法

我找到了解决问题的方法。我们必须将优先级更改为 -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 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。