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