Skip to content
Snippets Groups Projects
SelectQueryBuilder.php 1.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • Josh Pollock's avatar
    Josh Pollock committed
    <?php
    
    
    namespace calderawp\CalderaFormsQuery\Select;
    
    Josh Pollock's avatar
    Josh Pollock committed
    
    
    Josh Pollock's avatar
    Josh Pollock committed
    use calderawp\CalderaFormsQuery\QueryBuilder;
    
    Josh Pollock's avatar
    Josh Pollock committed
    use NilPortugues\Sql\QueryBuilder\Manipulation\Select;
    
    
    abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuery, DoesSelectQueryByEntryId
    
    Josh Pollock's avatar
    Josh Pollock committed
    {
    
    	/**
    	 * @var Select
    	 */
    
    Josh Pollock's avatar
    Josh Pollock committed
    	private $selectQuery;
    
    Josh Pollock's avatar
    Josh Pollock committed
    
    	/** @inheritdoc */
    
    Josh Pollock's avatar
    Josh Pollock committed
    	public function getSelectQuery()
    	{
    
    Josh Pollock's avatar
    Josh Pollock committed
    
    
    Josh Pollock's avatar
    Josh Pollock committed
    		if (empty($this->selectQuery)) {
    
    			$this->setNewQuery();
    
    Josh Pollock's avatar
    Josh Pollock committed
    		}
    
    Josh Pollock's avatar
    Josh Pollock committed
    		return $this->selectQuery;
    
    Josh Pollock's avatar
    Josh Pollock committed
    	}
    
    
    	/** @inheritdoc */
    	public function queryByEntryId($entryId)
    
    Josh Pollock's avatar
    Josh Pollock committed
    	{
    
    		return $this->is($this->getEntryIdColumn(), $entryId);
    
    
    Josh Pollock's avatar
    Josh Pollock committed
    	}
    
    	/**
    	 * @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
    	 */
    
    Josh Pollock's avatar
    Josh Pollock committed
    	public function addOrderBy($column, $ascending = true)
    	{
    
    Josh Pollock's avatar
    Josh Pollock committed
    		$order = $ascending ? self::ASC : self::DESC;
    
    Josh Pollock's avatar
    Josh Pollock committed
    		$this->getCurrentQuery()->orderBy($column, $order);
    
    Josh Pollock's avatar
    Josh Pollock committed
    		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;
    	}
    
    
    Josh Pollock's avatar
    Josh Pollock committed
    	/**
    	 * Set new query in selectQuery prop
    	 */
    
    	private function setNewQuery()
    	{
    		$this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName());
    	}
    
    Josh Pollock's avatar
    Josh Pollock committed
    }