duplicate-query-optimization (#3147)
This commit is contained in:
@@ -129,28 +129,39 @@ class Finder
|
||||
}
|
||||
|
||||
try {
|
||||
$query = $this->selectBuilderFactory
|
||||
$baseQueryBuilder = $this->selectBuilderFactory
|
||||
->create()
|
||||
->from($entityType)
|
||||
->withStrictAccessControl()
|
||||
->buildQueryBuilder()
|
||||
->where($where)
|
||||
->select(['id'])
|
||||
->limit(0, self::LIMIT)
|
||||
->build();
|
||||
->limit(0, self::LIMIT);
|
||||
} catch (Forbidden|BadRequest $e) {
|
||||
throw new RuntimeException($e->getMessage(), 0, $e);
|
||||
}
|
||||
|
||||
$builder = $this->entityManager
|
||||
->getRDBRepository($entityType)
|
||||
->clone($query);
|
||||
$repository = $this->entityManager->getRDBRepository($entityType);
|
||||
|
||||
if (!$builder->findOne()) {
|
||||
$query = $baseQueryBuilder
|
||||
->where($where)
|
||||
->build();
|
||||
|
||||
$rdbBuilder = $repository->clone($query);
|
||||
|
||||
if (!$rdbBuilder->findOne()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $builder->select(['*'])->find();
|
||||
$ids = array_map(
|
||||
fn(Entity $e) => $e->getId(),
|
||||
iterator_to_array($rdbBuilder->find())
|
||||
);
|
||||
|
||||
return $repository
|
||||
->clone($baseQueryBuilder->build())
|
||||
->select(['*'])
|
||||
->where(['id' => $ids])
|
||||
->find();
|
||||
}
|
||||
|
||||
private function getWhere(Entity $entity): ?WhereItem
|
||||
|
||||
Reference in New Issue
Block a user