/** * Gets the root entity alias of the query. * This method rethrows QueryException as InvalidEntityException to avoid BC break * * @param QueryBuilder $qb The query builder * @param bool $throwException Whether to throw exception in case the query does not have a root alias * * @return string|null * * @throws Exception\InvalidEntityException */ public static function getSingleRootAlias(QueryBuilder $qb, $throwException = true) { try { return BaseQueryUtils::getSingleRootAlias($qb, $throwException); } catch (QueryException $e) { throw new Exception\InvalidEntityException($e->getMessage()); } }
/** * Adds criteria to the query. * * @param QueryBuilder $qb * @param Criteria $criteria */ public function applyCriteria(QueryBuilder $qb, Criteria $criteria) { $joins = $criteria->getJoins(); if (!empty($joins)) { $rootAlias = QueryUtils::getSingleRootAlias($qb); foreach ($joins as $join) { $alias = $join->getAlias(); $joinExpr = str_replace(Criteria::ROOT_ALIAS_PLACEHOLDER, $rootAlias, $join->getJoin()); $condition = $join->getCondition(); if ($condition) { $condition = strtr($condition, [Criteria::ROOT_ALIAS_PLACEHOLDER => $rootAlias, Criteria::ENTITY_ALIAS_PLACEHOLDER => $alias]); } $method = strtolower($join->getJoinType()) . 'Join'; $qb->{$method}($joinExpr, $alias, $join->getConditionType(), $condition, $join->getIndexBy()); } } $qb->addCriteria($criteria); }
public function testGetSingleRootAliasWhenQueryHasNoRootAliasAndNoExceptionRequested() { $qb = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock(); $qb->expects($this->once())->method('getRootAliases')->willReturn([]); $this->assertNull(QueryUtils::getSingleRootAlias($qb, false)); }