예제 #1
0
 /**
  * Get select() default columns
  *
  * @return array
  */
 protected function getSelectColumns($columns = null)
 {
     if (null === $columns) {
         $domains = true;
     } elseif ($index = array_search('domains', $columns)) {
         $domains = true;
         unset($columns[$index]);
     } else {
         $domains = false;
     }
     $columns = parent::getSelectColumns($columns);
     $platform = $this->getDbAdapter()->getPlatform();
     if ($domains) {
         $columns['domains'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$domainTableName))->select()->columns(array(new FunctionCall('string_agg', array('domain', "\n"), array(FunctionCall::TYPE_IDENTIFIER, FunctionCall::TYPE_VALUE))))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$domainTableName, 'siteId')) . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->getSqlString($platform) . ')');
     }
     return $columns;
 }
예제 #2
0
파일: Mapper.php 프로젝트: gridguyz/core
 /**
  * Get select() default columns
  *
  * @return array
  */
 protected function getSelectColumns($columns = null)
 {
     if (null === $columns) {
         $properties = true;
     } elseif ($index = array_search(self::PROPERTIES_FIELD, $columns)) {
         $properties = true;
         unset($columns[$index]);
     } else {
         $properties = false;
     }
     $columns = parent::getSelectColumns($columns);
     if ($properties) {
         $platform = $this->getDbAdapter()->getPlatform();
         $columns[self::PROPERTIES_FIELD] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array(new Sql\Expression('TEXT( ARRAY_TO_JSON(
                          ARRAY_AGG( ? ORDER BY CHAR_LENGTH( ? ) ASC )
                      ) )', array(static::$propertyTableName, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_IDENTIFIER))))->where(array(new Predicate\Expression($platform->quoteIdentifier('ruleId') . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->getSqlString($platform) . ')');
     }
     return $columns;
 }
예제 #3
0
파일: Mapper.php 프로젝트: gridguyz/core
 /**
  * Get select() default columns
  *
  * @return array
  */
 protected function getSelectColumns($columns = null)
 {
     if (null === $columns) {
         $label = true;
     } elseif ($index = array_search('label', $columns)) {
         $label = true;
         unset($columns[$index]);
     } else {
         $label = false;
     }
     if (null === $columns) {
         $proxyData = true;
     } elseif ($index = array_search('proxyData', $columns)) {
         $proxyData = true;
         unset($columns[$index]);
     } else {
         $proxyData = false;
     }
     if (null === $columns) {
         $level = false;
     } elseif ($index = array_search('level', $columns)) {
         $level = true;
         unset($columns[$index]);
     } else {
         $level = false;
     }
     $columns = parent::getSelectColumns($columns);
     if ($label) {
         $platform = $this->getDbAdapter()->getPlatform();
         $columns['label'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$labelTableName))->select()->columns(array('label'))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$labelTableName, 'menuId')) . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->order(array(new Sql\Expression('CASE ? ' . 'WHEN ? THEN 1 ' . 'WHEN ? THEN 2 ' . 'WHEN ? THEN 3 ' . 'WHEN ? THEN 4 ' . 'ELSE 5 ' . 'END ASC', array('locale', $this->getLocale(), $this->getPrimaryLanguage(), $this->getDefaultLocale(), 'en'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE))))->limit(1)->getSqlString($platform) . ')');
     }
     if ($proxyData) {
         $platform = $this->getDbAdapter()->getPlatform();
         $columns['proxyData'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array(new Sql\Expression('TEXT( ARRAY_TO_JSON(
                          ARRAY_AGG( ? ORDER BY ? ASC )
                      ) )', array(static::$propertyTableName, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_IDENTIFIER))))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$propertyTableName, 'menuId')) . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->getSqlString($platform) . ')');
     }
     if ($level) {
         $columns['level'] = new Sql\Expression('(' . $this->sql(null)->select(array('ascendants' => static::$tableName))->columns(array(new Sql\Expression('COUNT(*) - 1')))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$tableName, 'left')) . ' BETWEEN ' . $platform->quoteIdentifierChain(array('ascendants', 'left')) . ' AND ' . $platform->quoteIdentifierChain(array('ascendants', 'right')))))->getSqlString($platform) . ')');
     }
     return $columns;
 }
예제 #4
0
파일: Mapper.php 프로젝트: gridguyz/core
 /**
  * Get select() default columns
  *
  * @return array
  */
 protected function getSelectColumns($columns = null)
 {
     if (null === $columns) {
         $proxyData = true;
     } elseif ($index = array_search('proxyData', $columns)) {
         $proxyData = true;
         unset($columns[$index]);
     } else {
         $proxyData = false;
     }
     if (null === $columns) {
         $tags = true;
     } elseif ($index = array_search('tags', $columns)) {
         $tags = true;
         unset($columns[$index]);
     } else {
         $tags = false;
     }
     if (null === $columns) {
         $tagIds = true;
     } elseif ($index = array_search('tagIds', $columns)) {
         $tagIds = true;
         unset($columns[$index]);
     } else {
         $tagIds = false;
     }
     if (null === $columns) {
         $localeTags = true;
     } elseif ($index = array_search('localeTags', $columns)) {
         $localeTags = true;
         unset($columns[$index]);
     } else {
         $localeTags = false;
     }
     $columns = parent::getSelectColumns($columns);
     $platform = $this->getDbAdapter()->getPlatform();
     if ($proxyData) {
         $columns['proxyData'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array(new Sql\Expression('TEXT( ARRAY_TO_JSON(
                          ARRAY_AGG(
                              ?
                              ORDER BY CASE ?
                                 WHEN ? THEN 1
                                 WHEN ? THEN 2
                                 WHEN ? THEN 3
                                 WHEN ? THEN 4
                                 ELSE 5
                              END DESC
                          )
                      ) )', array(static::$propertyTableName, 'locale', $this->getLocale(), $this->getPrimaryLanguage(), $this->getDefaultLocale(), 'en'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE))))->where(array(new Sql\Predicate\Operator(static::$propertyTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER)))->getSqlString($platform) . ')');
     } else {
         $original = array_keys(static::getColumns()) + array('tags', 'tagIds', 'localeTags');
         foreach ($columns as $key => $column) {
             if (is_numeric($key) && !in_array($column, $original)) {
                 unset($columns[$key]);
                 if (!isset($columns[$column])) {
                     $columns[$column] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array('value'))->where(array(new Sql\Predicate\Operator(static::$propertyTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER), 'name' => $column))->order(array(new Sql\Expression('CASE ? ' . 'WHEN ? THEN 1 ' . 'WHEN ? THEN 2 ' . 'WHEN ? THEN 3 ' . 'ELSE 4 ' . 'END ASC', array('locale', $this->getLocale(), $this->getPrimaryLanguage(), '*'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE))))->limit(1)->getSqlString($platform) . ')');
                 }
             }
         }
     }
     if ($tags) {
         $columns['tags'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$tagTableName))->select()->columns(array(new Sql\Expression('STRING_AGG( ?, ? ORDER BY ? ASC )', array('name', static::TAG_SEPARATOR, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_IDENTIFIER))))->join($this->getTableInSchema(static::$tagJoinTableName), static::$tagTableName . '.id = ' . static::$tagJoinTableName . '.tagId', array())->where(array(new Sql\Predicate\Operator(static::$tagJoinTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER)))->getSqlString($platform) . ')');
     }
     if ($tagIds) {
         $columns['tagIds'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$tagJoinTableName))->select()->columns(array(new Sql\Expression('STRING_AGG( TEXT( ? ), ? ORDER BY ? ASC )', array('tagId', static::TAG_SEPARATOR, 'tagId'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_IDENTIFIER))))->where(array(new Sql\Predicate\Operator(static::$tagJoinTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER)))->getSqlString($platform) . ')');
     }
     if ($localeTags) {
         $columns['localeTags'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$tagTableName))->select()->columns(array(new Sql\Expression('STRING_AGG( ?, ? ORDER BY ? ASC )', array('name', static::TAG_SEPARATOR, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_IDENTIFIER))))->join($this->getTableInSchema(static::$tagJoinTableName), static::$tagTableName . '.id = ' . static::$tagJoinTableName . '.tagId', array())->where(array(new Sql\Predicate\Operator(static::$tagJoinTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER), new Sql\Predicate\PredicateSet(array(new Sql\Predicate\IsNull(static::$tagTableName . '.locale'), new Sql\Predicate\In(static::$tagTableName . '.locale', array($this->getLocale(), $this->getPrimaryLanguage(), ''))), Sql\Predicate\PredicateSet::COMBINED_BY_OR)))->getSqlString($platform) . ')');
     }
     return $columns;
 }