/** * @param QueryBuilder $qb * @param array $config */ public function prepareQuery(QueryBuilder $qb, $config) { $rootAlias = $this->doctrineHelper->getRootAlias($qb); $entityClass = $this->doctrineHelper->getRootEntityClass($qb); $entityMetadata = $this->doctrineHelper->getEntityMetadata($entityClass); $qb->resetDQLPart('select'); $this->updateSelectQueryPart($qb, $rootAlias, $entityClass, $config); $aliasCounter = 0; $fields = $this->getFields($entityClass, $config); foreach ($fields as $field) { if (!$entityMetadata->isAssociation($field) || $entityMetadata->isCollectionValuedAssociation($field)) { continue; } $alias = 'a' . ++$aliasCounter; $qb->leftJoin(sprintf('%s.%s', $rootAlias, $field), $alias); $this->updateSelectQueryPart($qb, $alias, $entityMetadata->getAssociationTargetClass($field), $this->getFieldConfig($config, $field), true); } }
/** * @param QueryBuilder $qb * @param array $config */ protected function updateQuery(QueryBuilder $qb, $config) { $rootAlias = $this->doctrineHelper->getRootAlias($qb); $entityClass = $this->doctrineHelper->getRootEntityClass($qb); $entityMetadata = $this->doctrineHelper->getEntityMetadata($entityClass); $qb->resetDQLPart('select'); $this->updateSelectQueryPart($qb, $rootAlias, $entityClass, $config); $aliasCounter = 0; $fields = $this->fieldAccessor->getFields($entityClass, $config); foreach ($fields as $field) { if (!$entityMetadata->isAssociation($field) || $entityMetadata->isCollectionValuedAssociation($field)) { continue; } $join = sprintf('%s.%s', $rootAlias, $field); $alias = $this->getExistingJoinAlias($qb, $rootAlias, $join); if (!$alias) { $alias = 'a' . ++$aliasCounter; $qb->leftJoin($join, $alias); } $this->updateSelectQueryPart($qb, $alias, $entityMetadata->getAssociationTargetClass($field), ConfigUtil::getFieldConfig($config, $field), true); } }