Merge pull request #1365 from sdbondi/develop

Ref #649 - Added query builder support for BETWEEN clauses
This commit is contained in:
Taylor Otwell 2012-10-25 06:11:15 -07:00
commit 0a0eb3779c
2 changed files with 88 additions and 0 deletions

61
laravel/database/query.php Normal file → Executable file
View File

@ -342,6 +342,67 @@ public function or_where_not_in($column, $values)
{ {
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
laravel/database/query/grammars/grammar.php Normal file → Executable file
View File

@ -242,6 +242,33 @@ protected function where_not_in($where)
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.
* *