diff --git a/application/Espo/Core/Duplicate/Finder.php b/application/Espo/Core/Duplicate/Finder.php index 50b156b530..3bd441970b 100644 --- a/application/Espo/Core/Duplicate/Finder.php +++ b/application/Espo/Core/Duplicate/Finder.php @@ -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