get('entityType'); $modifiedQuery = $this->addImportEntityJoin($entity, $relationName, $query); return $this->entityManager ->getRDBRepository($entityType) ->clone($modifiedQuery) ->find(); } protected function addImportEntityJoin(ImportEntity $entity, string $link, Query $query): Query { $entityType = $entity->get('entityType'); $param = null; switch ($link) { case 'imported': $param = 'isImported'; break; case 'duplicates': $param = 'isDuplicate'; break; case 'updated': $param = 'isUpdated'; break; default: return $query; } $builder = $this->entityManager->getQueryBuilder()->clone($query); $builder->join( 'ImportEntity', 'importEntity', [ 'importEntity.importId' => $entity->getId(), 'importEntity.entityType' => $entityType, 'importEntity.entityId:' => 'id', 'importEntity.' . $param => true, ] ); return $builder->build(); } public function countResultRecords(ImportEntity $entity, string $relationName, ?Query $query = null): int { $entityType = $entity->get('entityType'); $query = $query ?? $this->entityManager ->getQueryBuilder() ->select() ->from($entityType) ->build(); $modifiedQuery = $this->addImportEntityJoin($entity, $relationName, $query); return $this->entityManager ->getRDBRepository($entityType) ->clone($modifiedQuery) ->count(); } protected function afterRemove(Entity $entity, array $options = []) { if ($entity->get('fileId')) { $attachment = $this->entityManager->getEntity('Attachment', $entity->get('fileId')); if ($attachment) { $this->entityManager->removeEntity($attachment); } } $delete = $this->entityManager ->getQueryBuilder() ->delete() ->from('ImportEntity') ->where([ 'importId' => $entity->getId(), ]) ->build(); $this->entityManager->getQueryExecutor()->execute($delete); parent::afterRemove($entity, $options); } }