Example #1
0
 protected function parseCollection(Sql $sql, Collection $collection, $alias, &$aliases, &$conditions)
 {
     $s = $this->getStyle();
     $entity = $collection->getName();
     $parent = $collection->getParentName();
     $next = $collection->getNextName();
     $parentAlias = $parent ? $aliases[$parent] : null;
     $aliases[$entity] = $alias;
     $conditions = $this->parseConditions($conditions, $collection, $alias) ?: $conditions;
     //No parent collection means it's the first table in the query
     if (is_null($parentAlias)) {
         $sql->from($entity);
         $this->parseMixins($sql, $collection, $entity);
         return;
     } else {
         if ($collection->isRequired()) {
             $sql->innerJoin($entity);
         } else {
             $sql->leftJoin($entity);
         }
         $this->parseMixins($sql, $collection, $entity);
         if ($alias !== $entity) {
             $sql->as($alias);
         }
         $aliasedPk = $alias . '.' . $s->identifier($entity);
         $aliasedParentPk = $parentAlias . '.' . $s->identifier($parent);
         if ($this->hasComposition($entity, $next, $parent)) {
             $onName = $alias . '.' . $s->remoteIdentifier($parent);
             $onAlias = $aliasedParentPk;
         } else {
             $onName = $parentAlias . '.' . $s->remoteIdentifier($entity);
             $onAlias = $aliasedPk;
         }
         return $sql->on(array($onName => $onAlias));
     }
 }