<?php namespace calderawp\CalderaFormsQuery\Select; use calderawp\CalderaFormsQuery\QueryBuilder; use NilPortugues\Sql\QueryBuilder\Manipulation\Select; abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuery, DoesSelectQueryByEntryId { /** * @var Select */ private $selectQuery; /** @inheritdoc */ public function getSelectQuery() { if (empty($this->selectQuery)) { $this->setNewQuery(); } return $this->selectQuery; } /** @inheritdoc */ public function queryByEntryId($entryId) { return $this->is($this->getEntryIdColumn(), $entryId); } /** * @param string $column Column to orderby. * @param bool $ascending Optional. To use ascending order? If false, descending is used. True is the default. * @return $this */ public function addOrderBy($column, $ascending = true) { $order = $ascending ? self::ASC : self::DESC; $this->getCurrentQuery()->orderBy($column, $order); return $this; } /** * Add pagination to a query * * @param int $page What page of query * @param int $limit How many per page * * @return $this */ public function addPagination($page, $limit = 25) { $start = 1 + ( $page * $limit) - $limit; $last = $page * $limit; $this->getCurrentQuery()->limit((int)$start, (int)$last); return $this; } /** * @return Select */ protected function getCurrentQuery() { return $this->getSelectQuery(); } /** @inheritdoc */ public function resetQuery() { $this->setNewQuery(); return $this; } /** * Set new query in selectQuery prop */ private function setNewQuery() { $this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName()); } }