/**
  * Returns total count and data for all Locations satisfying the parameters.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion
  * @param int $offset
  * @param int $limit
  * @param null|\eZ\Publish\API\Repository\Values\Content\Query\SortClause[] $sortClauses
  * @param array $languageFilter
  * @param bool $doCount
  *
  * @return mixed[][]
  */
 public function find(Criterion $criterion, $offset, $limit, array $sortClauses = null, array $languageFilter = array(), $doCount = true)
 {
     $count = $doCount ? $this->getTotalCount($criterion) : null;
     if (!$doCount && $limit === 0) {
         throw new \RuntimeException('Invalid query, can not disable count and request 0 items at the same time');
     }
     if ($limit === 0 || $count !== null && $count <= $offset) {
         return array('count' => $count, 'rows' => array());
     }
     $selectQuery = $this->handler->createSelectQuery();
     $selectQuery->select('ezcontentobject_tree.*');
     if ($sortClauses !== null) {
         $this->sortClauseConverter->applySelect($selectQuery, $sortClauses);
     }
     $selectQuery->from($this->handler->quoteTable('ezcontentobject_tree'))->innerJoin('ezcontentobject', 'ezcontentobject_tree.contentobject_id', 'ezcontentobject.id')->innerJoin('ezcontentobject_version', 'ezcontentobject.id', 'ezcontentobject_version.contentobject_id');
     if ($sortClauses !== null) {
         $this->sortClauseConverter->applyJoin($selectQuery, $sortClauses);
     }
     $selectQuery->where($this->criteriaConverter->convertCriteria($selectQuery, $criterion), $selectQuery->expr->eq('ezcontentobject.status', $selectQuery->bindValue(1, null, PDO::PARAM_INT)), $selectQuery->expr->eq('ezcontentobject_version.status', $selectQuery->bindValue(1, null, PDO::PARAM_INT)), $selectQuery->expr->neq($this->handler->quoteColumn('depth', 'ezcontentobject_tree'), $selectQuery->bindValue(0, null, PDO::PARAM_INT)));
     if ($sortClauses !== null) {
         $this->sortClauseConverter->applyOrderBy($selectQuery);
     }
     $selectQuery->limit($limit, $offset);
     $statement = $selectQuery->prepare();
     $statement->execute();
     return array('count' => $count, 'rows' => $statement->fetchAll(PDO::FETCH_ASSOC));
 }
    /**
     * Get sorted arrays of content IDs, which should be returned
     *
     * @param Criterion $filter
     * @param array $sort
     * @param mixed $offset
     * @param mixed $limit
     * @param mixed $translations
     *
     * @return int[]
     */
    protected function getContentInfoList( Criterion $filter, $sort, $offset, $limit, $translations )
    {
        $query = $this->handler->createSelectQuery();
        $query->selectDistinct(
            'ezcontentobject.*',
            $this->handler->aliasedColumn( $query, 'main_node_id', 'main_tree' )
        );

        if ( $sort !== null )
        {
            $this->sortClauseConverter->applySelect( $query, $sort );
        }

        $query->from(
            $this->handler->quoteTable( 'ezcontentobject' )
        )->innerJoin(
            'ezcontentobject_version',
            'ezcontentobject.id',
            'ezcontentobject_version.contentobject_id'
        )->leftJoin(
            $this->handler->alias(
                $this->handler->quoteTable( 'ezcontentobject_tree' ),
                $this->handler->quoteIdentifier( 'main_tree' )
            ),
            $query->expr->lAnd(
                $query->expr->eq(
                    $this->handler->quoteColumn( "contentobject_id", "main_tree" ),
                    $this->handler->quoteColumn( "id", "ezcontentobject" )
                ),
                $query->expr->eq(
                    $this->handler->quoteColumn( "main_node_id", "main_tree" ),
                    $this->handler->quoteColumn( "node_id", "main_tree" )
                )
            )
        );

        if ( $sort !== null )
        {
            $this->sortClauseConverter->applyJoin( $query, $sort );
        }

        $query->where(
            $this->getQueryCondition( $filter, $query, $translations )
        );

        if ( $sort !== null )
        {
            $this->sortClauseConverter->applyOrderBy( $query );
        }

        $query->limit( $limit, $offset );

        $statement = $query->prepare();
        $statement->execute();

        return $statement->fetchAll( \PDO::FETCH_ASSOC );
    }
Пример #3
0
 /**
  * Returns total results count for $criterion and $sortClauses.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion
  * @param null|\eZ\Publish\API\Repository\Values\Content\Query\SortClause[] $sortClauses
  *
  * @return array
  */
 protected function getTotalCount(Criterion $criterion, $sortClauses)
 {
     $query = $this->handler->createSelectQuery();
     $query->select($query->alias($query->expr->count('*'), 'count'))->from($this->handler->quoteTable('ezcontentobject_tree'))->innerJoin('ezcontentobject', 'ezcontentobject_tree.contentobject_id', 'ezcontentobject.id')->innerJoin('ezcontentobject_version', 'ezcontentobject.id', 'ezcontentobject_version.contentobject_id');
     if ($sortClauses !== null) {
         $this->sortClauseConverter->applyJoin($query, $sortClauses);
     }
     $query->where($this->criteriaConverter->convertCriteria($query, $criterion), $query->expr->eq('ezcontentobject.status', $query->bindValue(1, null, PDO::PARAM_INT)), $query->expr->eq('ezcontentobject_version.status', $query->bindValue(1, null, PDO::PARAM_INT)), $query->expr->neq($this->handler->quoteColumn('depth', 'ezcontentobject_tree'), $query->bindValue(0, null, PDO::PARAM_INT)));
     $statement = $query->prepare();
     $statement->execute();
     $res = $statement->fetchAll(PDO::FETCH_ASSOC);
     return (int) $res[0]['count'];
 }