Package | system.db.schema |
---|---|
Inheritance | class CDbCriteria |
Since | 1.0 |
Version | $Id$ |
Source Code | framework/db/schema/CDbCriteria.php |
Property | Type | Description | Defined By |
---|---|---|---|
condition | string | query condition. | CDbCriteria |
distinct | boolean | whether to select distinct rows of data only. | CDbCriteria |
group | string | how to group the query results. | CDbCriteria |
having | string | the condition to be applied with GROUP-BY clause. | CDbCriteria |
join | string | how to join with other tables. | CDbCriteria |
limit | integer | maximum number of records to be returned. | CDbCriteria |
offset | integer | zero-based offset from where the records are to be returned. | CDbCriteria |
order | string | how to sort the query results. | CDbCriteria |
params | array | list of query parameter values indexed by parameter placeholders. | CDbCriteria |
select | mixed | the columns being selected. | CDbCriteria |
Method | Description | Defined By |
---|---|---|
__construct() | Constructor. | CDbCriteria |
addColumnCondition() | Appends a condition for matching the given list of column values. | CDbCriteria |
addCondition() | Appends a condition to the existing condition. | CDbCriteria |
addInCondition() | Appends an IN condition to the existing condition. | CDbCriteria |
addSearchCondition() | Appends a search condition to the existing condition. | CDbCriteria |
mergeWith() | Merges with another criteria. | CDbCriteria |
toArray() | CDbCriteria |
query condition. This refers to the WHERE clause in an SQL statement.
For example, age>31 AND team=1
.
whether to select distinct rows of data only. If this is set true, the SELECT clause would be changed to SELECT DISTINCT.
how to group the query results. This refers to the GROUP BY clause in an SQL statement.
For example, 'projectID, teamID'
.
the condition to be applied with GROUP-BY clause.
For example, 'SUM(revenue)<50000'
.
how to join with other tables. This refers to the JOIN clause in an SQL statement.
For example, 'LEFT JOIN users ON users.id=authorID'
.
maximum number of records to be returned. If less than 0, it means no limit.
zero-based offset from where the records are to be returned. If less than 0, it means starting from the beginning.
how to sort the query results. This refers to the ORDER BY clause in an SQL statement.
list of query parameter values indexed by parameter placeholders.
For example, array(':name'=>'Dan', ':age'=>31)
.
the columns being selected. This refers to the SELECT clause in an SQL statement. The property can be either a string (column names separated by commas) or an array of column names. Defaults to '*', meaning all columns.
public void __construct(array $data=array (
))
| ||
$data | array | criteria initial property values (indexed by property name) |
public function __construct($data=array())
{
foreach($data as $name=>$value)
$this->$name=$value;
}
Constructor.
public CDbCriteria addColumnCondition(array $columns, string $columnOperator='AND', string $operator='AND')
| ||
$columns | array | list of column names and values to be matched (name=>value) |
$columnOperator | string | the operator to concatenate multiple column matching condition. Defaults to 'AND'. |
$operator | string | the operator used to concatenate the new condition with the existing one. Defaults to 'AND'. |
{return} | CDbCriteria | the criteria object itself |
public function addColumnCondition($columns,$columnOperator='AND',$operator='AND')
{
$params=array();
foreach($columns as $name=>$value)
{
if($value===null)
$params[]=$name.' IS NULL';
else
{
$params[]=$name.'='.self::PARAM_PREFIX.$this->_paramCount;
$this->params[self::PARAM_PREFIX.$this->_paramCount++]=$value;
}
}
return $this->addCondition(implode(" $columnOperator ",$params), $operator);
}
Appends a condition for matching the given list of column values. The generated condition will be concatenated to the existing condition via the specified operator which defaults to 'AND'. The condition is generated by matching each column and the corresponding value.
public CDbCriteria addCondition(mixed $condition, string $operator='AND')
| ||
$condition | mixed | the new condition. It can be either a string or an array of strings. |
$operator | string | the operator to join different conditions. Defaults to 'AND'. |
{return} | CDbCriteria | the criteria object itself |
public function addCondition($condition,$operator='AND')
{
if(is_array($condition))
{
if($condition===array())
return $this;
$condition='('.implode(') '.$operator.' (',$condition).')';
}
if($this->condition==='')
$this->condition=$condition;
else
$this->condition='('.$this->condition.') '.$operator.' ('.$condition.')';
return $this;
}
Appends a condition to the existing condition. The new condition and the existing condition will be concatenated via the specified operator which defaults to 'AND'. The new condition can also be an array. In this case, all elements in the array will be concatenated together via the operator. This method handles the case when the existing condition is empty. After calling this method, the condition property will be modified.
public CDbCriteria addInCondition(string $column, array $values, string $operator='AND')
| ||
$column | string | the column name (or a valid SQL expression) |
$values | array | list of values that the column value should be in |
$operator | string | the operator used to concatenate the new condition with the existing one. Defaults to 'AND'. |
{return} | CDbCriteria | the criteria object itself |
public function addInCondition($column,$values,$operator='AND')
{
if(($n=count($values))<1)
return $this->addCondition('0=1',$operator);
if($n===1)
{
$value=reset($values);
if($value===null)
return $this->addCondition($column.' IS NULL');
$condition=$column.'='.self::PARAM_PREFIX.$this->_paramCount;
$this->params[self::PARAM_PREFIX.$this->_paramCount++]=$value;
}
else
{
$params=array();
foreach($values as $value)
{
$params[]=self::PARAM_PREFIX.$this->_paramCount;
$this->params[self::PARAM_PREFIX.$this->_paramCount++]=$value;
}
$condition=$column.' IN ('.implode(', ',$params).')';
}
return $this->addCondition($condition,$operator);
}
Appends an IN condition to the existing condition. The IN condition and the existing condition will be concatenated via the specified operator which defaults to 'AND'. The IN condition is generated by using the SQL IN operator which requires the specified column value to be among the given list of values.
public CDbCriteria addSearchCondition(string $column, string $keyword, boolean $escape=true, string $operator='AND')
| ||
$column | string | the column name (or a valid SQL expression) |
$keyword | string | the search keyword. This interpretation of the keyword is affected by the next parameter. |
$escape | boolean | whether the keyword should be escaped if it contains characters % or _. When this parameter is true (default), the special characters % (matches 0 or more characters) and _ (matches a single character) will be escaped, and the keyword will be surrounded with a % character on both ends. When this parameter is false, the keyword will be directly used for matching without any change. |
$operator | string | the operator used to concatenate the new condition with the existing one. Defaults to 'AND'. |
{return} | CDbCriteria | the criteria object itself |
public function addSearchCondition($column,$keyword,$escape=true,$operator='AND')
{
if($escape)
$keyword='%'.strtr($keyword,array('%'=>'\%', '_'=>'\_')).'%';
$condition=$column.' LIKE '.self::PARAM_PREFIX.$this->_paramCount;
$this->params[self::PARAM_PREFIX.$this->_paramCount++]=$keyword;
return $this->addCondition($condition, $operator);
}
Appends a search condition to the existing condition. The search condition and the existing condition will be concatenated via the specified operator which defaults to 'AND'. The search condition is generated using the SQL LIKE operator with the given column name and search keyword.
public void mergeWith(CDbCriteria $criteria, boolean $useAnd=true)
| ||
$criteria | CDbCriteria | the criteria to be merged with. |
$useAnd | boolean | whether to use 'AND' to merge condition and having options. If false, 'OR' will be used instead. Defaults to 'AND'. This parameter has been available since version 1.0.6. |
public function mergeWith($criteria,$useAnd=true)
{
$and=$useAnd ? 'AND' : 'OR';
if(is_array($criteria))
$criteria=new self($criteria);
if($this->select!==$criteria->select)
{
if($this->select==='*')
$this->select=$criteria->select;
else if($criteria->select!=='*')
{
$select1=is_string($this->select)?preg_split('/\s*,\s*/',trim($this->select),-1,PREG_SPLIT_NO_EMPTY):$this->select;
$select2=is_string($criteria->select)?preg_split('/\s*,\s*/',trim($criteria->select),-1,PREG_SPLIT_NO_EMPTY):$criteria->select;
$this->select=array_merge($select1,array_diff($select2,$select1));
}
}
if($this->condition!==$criteria->condition)
{
if($this->condition==='')
$this->condition=$criteria->condition;
else if($criteria->condition!=='')
$this->condition="({$this->condition}) $and ({$criteria->condition})";
}
if($this->params!==$criteria->params)
$this->params=array_merge($this->params,$criteria->params);
if($criteria->limit>0)
$this->limit=$criteria->limit;
if($criteria->offset>=0)
$this->offset=$criteria->offset;
if($this->order!==$criteria->order)
{
if($this->order==='')
$this->order=$criteria->order;
else if($criteria->order!=='')
$this->order=$criteria->order.', '.$this->order;
}
if($this->group!==$criteria->group)
{
if($this->group==='')
$this->group=$criteria->group;
else if($criteria->group!=='')
$this->group.=', '.$criteria->group;
}
if($this->join!==$criteria->join)
{
if($this->join==='')
$this->join=$criteria->join;
else if($criteria->join!=='')
$this->join.=' '.$criteria->join;
}
if($this->having!==$criteria->having)
{
if($this->having==='')
$this->having=$criteria->having;
else if($criteria->having!=='')
$this->having="({$this->having}) $and ({$criteria->having})";
}
if($criteria->distinct>0)
$this->distinct=$criteria->distinct;
}
Merges with another criteria. In general, the merging makes the resulting criteria more restrictive. For example, if both criterias have conditions, they will be 'AND' together. Also, the criteria passed as the parameter takes precedence in case two options cannot be merged (e.g. LIMIT, OFFSET).
public array toArray()
| ||
{return} | array | the array representation of the criteria |
public function toArray()
{
$result=array();
foreach(array('select', 'condition', 'params', 'limit', 'offset', 'order', 'group', 'join', 'having', 'distinct') as $name)
$result[$name]=$this->$name;
return $result;
}
Signup or Login in order to comment.