Example #1
0
 /**
  * Generates the SQL JOINs, that are necessary for Class Table Inheritance,
  * for the given class.
  *
  * @param ClassMetadata $class
  * @param string $dqlAlias
  */
 private function _generateClassTableInheritanceJoins($class, $dqlAlias)
 {
     $sql = '';
     $baseTableAlias = $this->getSqlTableAlias($class->primaryTable['name'] . $dqlAlias);
     $idColumns = $class->getIdentifierColumnNames();
     // INNER JOIN parent class tables
     foreach ($class->parentClasses as $parentClassName) {
         $parentClass = $this->_em->getClassMetadata($parentClassName);
         $tableAlias = $this->getSqlTableAlias($parentClass->primaryTable['name'] . $dqlAlias);
         $sql .= ' INNER JOIN ' . $parentClass->primaryTable['name'] . ' ' . $tableAlias . ' ON ';
         $first = true;
         foreach ($idColumns as $idColumn) {
             if ($first) {
                 $first = false;
             } else {
                 $sql .= ' AND ';
             }
             $sql .= $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn;
         }
     }
     // LEFT JOIN subclass tables
     foreach ($class->subClasses as $subClassName) {
         $subClass = $this->_em->getClassMetadata($subClassName);
         $tableAlias = $this->getSqlTableAlias($subClass->primaryTable['name'] . $dqlAlias);
         $sql .= ' LEFT JOIN ' . $subClass->primaryTable['name'] . ' ' . $tableAlias . ' ON ';
         $first = true;
         foreach ($idColumns as $idColumn) {
             if ($first) {
                 $first = false;
             } else {
                 $sql .= ' AND ';
             }
             $sql .= $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn;
         }
     }
     return $sql;
 }