Apply order by parts of sort clauses to query.
public applyOrderBy ( eZ\Publish\Core\Persistence\Database\SelectQuery $query ) | ||
$query | eZ\Publish\Core\Persistence\Database\SelectQuery |
/** * 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 bool $doCount * * @return mixed[][] */ public function find(Criterion $criterion, $offset, $limit, array $sortClauses = null, $doCount = true) { $count = $doCount ? $this->getTotalCount($criterion, $sortClauses) : 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 ); }