getClassMetadataFromJoinAlias() публичный статический Метод

Gets the class metadata from a given join alias.
public static getClassMetadataFromJoinAlias ( string $alias, Doctrine\ORM\QueryBuilder $queryBuilder, Doctrine\Common\Persistence\ManagerRegistry $managerRegistry ) : Doctrine\ORM\Mapping\ClassMetadata
$alias string
$queryBuilder Doctrine\ORM\QueryBuilder
$managerRegistry Doctrine\Common\Persistence\ManagerRegistry
Результат Doctrine\ORM\Mapping\ClassMetadata
Пример #1
0
 public function testGetClassMetadataFromJoinAlias()
 {
     $queryBuilder = $this->prophesize(QueryBuilder::class);
     $queryBuilder->getRootEntities()->willReturn(['Dummy']);
     $queryBuilder->getRootAliases()->willReturn(['d']);
     $queryBuilder->getDQLPart('join')->willReturn(['a_1' => new Join('INNER_JOIN', 'relatedDummy', 'a_1', null, 'a_1.name = r.name')]);
     $classMetadata = $this->prophesize(ClassMetadata::class);
     $objectManager = $this->prophesize(ObjectManager::class);
     $objectManager->getClassMetadata('Dummy')->willReturn($classMetadata->reveal());
     $managerRegistry = $this->prophesize(ManagerRegistry::class);
     $managerRegistry->getManagerForClass('Dummy')->willReturn($objectManager->reveal());
     $metadata = QueryJoinParser::getClassMetadataFromJoinAlias('a_1', $queryBuilder->reveal(), $managerRegistry->reveal());
     $this->assertEquals($metadata, $classMetadata->reveal());
 }
Пример #2
0
 /**
  * Determines whether the query builder has ORDER BY on entity joined through
  * to-many association.
  *
  * @param QueryBuilder    $queryBuilder
  * @param ManagerRegistry $managerRegistry
  *
  * @return bool
  */
 public static function hasOrderByOnToManyJoin(QueryBuilder $queryBuilder, ManagerRegistry $managerRegistry) : bool
 {
     if (empty($orderByParts = $queryBuilder->getDQLPart('orderBy')) || empty($joinParts = $queryBuilder->getDQLPart('join'))) {
         return false;
     }
     $orderByAliases = [];
     foreach ($orderByParts as $orderBy) {
         $parts = QueryJoinParser::getOrderByParts($orderBy);
         foreach ($parts as $part) {
             if (false !== ($pos = strpos($part, '.'))) {
                 $alias = substr($part, 0, $pos);
                 $orderByAliases[$alias] = true;
             }
         }
     }
     if (!empty($orderByAliases)) {
         foreach ($joinParts as $joins) {
             foreach ($joins as $join) {
                 $alias = QueryJoinParser::getJoinAlias($join);
                 if (isset($orderByAliases[$alias])) {
                     $relationship = QueryJoinParser::getJoinRelationship($join);
                     list($parentAlias, $association) = explode('.', $relationship);
                     $parentMetadata = QueryJoinParser::getClassMetadataFromJoinAlias($parentAlias, $queryBuilder, $managerRegistry);
                     if ($parentMetadata->isCollectionValuedAssociation($association)) {
                         return true;
                     }
                 }
             }
         }
     }
     return false;
 }