Browse Source

Ref #649 - Added query builder support for BETWEEN clauses

Signed-off-by: Stan Bondi <stan@stanley-pc.(none)>
Stan Bondi 12 years ago
parent
commit
5f4838726e
2 changed files with 88 additions and 0 deletions
  1. 61 0
      laravel/database/query.php
  2. 27 0
      laravel/database/query/grammars/grammar.php

+ 61 - 0
laravel/database/query.php

@@ -342,6 +342,67 @@ class Query {
 	{
 	{
 		return $this->where_not_in($column, $values, 'OR');
 		return $this->where_not_in($column, $values, 'OR');
 	}
 	}
+	
+	/**
+	 * Add a BETWEEN condition to the query
+	 * 
+	 * @param  string  $column    
+	 * @param  mixed  $min       
+	 * @param  mixed  $max       
+	 * @param  string  $connector 
+	 * @param  boolean $not       
+	 * @return Query
+	 */
+	public function where_between($column, $min, $max, $connector = 'AND', $not = false)
+	{
+		$type = ($not) ? 'where_not_between' : 'where_between';
+
+		$this->wheres[] = compact('type', 'column', 'min', 'max', 'connector');
+
+		$this->bindings[] = $min;
+		$this->bindings[] = $max;
+
+		return $this;
+	}
+
+	/**
+	 * Add a OR BETWEEN condition to the query
+	 * 
+	 * @param  string  $column    
+	 * @param  mixed  $min       
+	 * @param  mixed  $max       
+	 * @return Query
+	 */
+	public function or_where_between($column, $min, $max)
+	{
+		return $this->where_between($column, $min, $max, 'OR');
+	}
+
+	/**
+	 * Add a NOT BETWEEN condition to the query
+	 * 
+	 * @param  string  $column    
+	 * @param  mixed  $min       
+	 * @param  mixed  $max       
+	 * @return Query
+	 */
+	public function where_not_between($column, $min, $max, $connector = 'AND')
+	{
+		return $this->where_between($column, $min, $max, $connector, true);
+	}
+
+	/**
+	 * Add a OR NOT BETWEEN condition to the query
+	 * 
+	 * @param  string  $column    
+	 * @param  mixed  $min       
+	 * @param  mixed  $max       
+	 * @return Query
+	 */
+	public function or_where_not_between($column, $min, $max)
+	{
+		return $this->where_not_between($column, $min, $max, 'OR');
+	}
 
 
 	/**
 	/**
 	 * Add a where null condition to the query.
 	 * Add a where null condition to the query.

+ 27 - 0
laravel/database/query/grammars/grammar.php

@@ -242,6 +242,33 @@ class Grammar extends \Laravel\Database\Grammar {
 		return $this->wrap($where['column']).' NOT IN ('.$parameters.')';
 		return $this->wrap($where['column']).' NOT IN ('.$parameters.')';
 	}
 	}
 
 
+	/**
+	 * Compile a WHERE BETWEEN clause
+	 * 	
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function where_between($where)
+	{
+		$min = $this->parameter($where['min']);
+		$max = $this->parameter($where['max']);
+
+		return $this->wrap($where['column']).' BETWEEN '.$min.' AND '.$max;
+	}
+
+	/**
+	 * Compile a WHERE NOT BETWEEN clause
+	 * @param  array $where 
+	 * @return string        
+	 */
+	protected function where_not_between($where)
+	{		
+		$min = $this->parameter($where['min']);
+		$max = $this->parameter($where['max']);
+		
+		return $this->wrap($where['column']).' NOT BETWEEN '.$min.' AND '.$max;
+	}
+
 	/**
 	/**
 	 * Compile a WHERE NULL clause.
 	 * Compile a WHERE NULL clause.
 	 *
 	 *