如何解决如何使用 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 举报,一经查实,本站将立刻删除。