CDbCriteria
| Пакет | system.db.schema |
|---|---|
| Наследование | class CDbCriteria » CComponent |
| С версии | 1.0 |
| Исходный код | framework/db/schema/CDbCriteria.php |
Его можно использовать в методах запроса AR, таких как CActiveRecord::find и CActiveRecord::findAll.
$criteria=new CDbCriteria(); $criteria->compare('status',Post::STATUS_ACTIVE); $criteria->addInCondition('id',array(1,2,3,4,5,6));
$posts = Post::model()->findAll($criteria);
Общественные свойства
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| alias | строка | имя псевдонима таблицы. | CDbCriteria |
| condition | строка | условие запроса. | CDbCriteria |
| distinct | логическое значение | выбирать только уникальные строки данных. | CDbCriteria |
| group | строка | как группировать результаты запроса. | CDbCriteria |
| having | строка | условие, которое должно применяться с клаузой GROUP-BY. | CDbCriteria |
| index | строка | имя атрибута AR, значение которого должно использоваться в качестве индекса массива результатов запроса. | CDbCriteria |
| join | строка | как присоединиться к другим таблицам. | CDbCriteria |
| limit | целое число | максимальное количество записей, которое должно быть возвращено. | CDbCriteria |
| offset | целое число | смещение с нуля, от которого должны быть возвращены записи. | CDbCriteria |
| order | строка | как отсортировать результаты запроса. | CDbCriteria |
| paramCount | целое число | глобальный счётчик анонимных параметров привязки. | CDbCriteria |
| params | массив | список значений параметров запроса, индексированных по заполнительным параметрам. | CDbCriteria |
| scopes | смешанный тип | применяемые области видимости Это свойство эффективно только при передаче критериев одному из следующих методов:
Может быть установлено в одно из следующих значений:
| CDbCriteria |
| select | смешанный тип | выбираемые столбцы. | CDbCriteria |
| together | логическое значение | внешние таблицы должны быть объединены с основной таблицей в одном SQL-запросе. | CDbCriteria |
| with | смешанный тип | критерии запроса для отношений. | CDbCriteria |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызов именованного метода, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CDbCriteria |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение по его имени. | CComponent |
| __isset() | Проверка, является ли значение свойства нулевым. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в значение null. | CComponent |
| __wakeup() | Переназначение параметров критериев при десериализации для предотвращения столкновений имён. | CDbCriteria |
| addBetweenCondition() | Добавление условия BETWEEN к свойству condition. | CDbCriteria |
| addColumnCondition() | Добавление условия для соответствия заданному списку значений столбцов. | CDbCriteria |
| addCondition() | Добавление условия к существующему свойству condition. | CDbCriteria |
| addInCondition() | Добавление условия IN к существующему свойству condition. | CDbCriteria |
| addNotInCondition() | Добавление условия NOT IN к существующему свойству condition. | CDbCriteria |
| addSearchCondition() | Добавление условия поиска к существующему свойству condition. | CDbCriteria |
| asa() | Возвращает объект поведения по имени. | CComponent |
| attachBehavior() | Присоединение поведения к компоненту. | CComponent |
| attachBehaviors() | Присоединение списка поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединение обработчика событий к событию. | CComponent |
| canGetProperty() | Определение возможности чтения свойства. | CComponent |
| canSetProperty() | Определение возможности установки свойства. | CComponent |
| compare() | Добавление выражения сравнения к свойству condition. | CDbCriteria |
| detachBehavior() | Отсоединение поведения от компонента. | CComponent |
| detachBehaviors() | Отсоединение всех поведений от компонента. | CComponent |
| detachEventHandler() | Отсоединение существующего обработчика событий. | CComponent |
| disableBehavior() | Отключение присоединённого поведения. | CComponent |
| disableBehaviors() | Отключение всех присоединённых поведений к компоненту. | CComponent |
| enableBehavior() | Включение присоединённого поведения. | CComponent |
| enableBehaviors() | Включение всех присоединённых поведений к компоненту. | CComponent |
| evaluateExpression() | Вычисление PHP-выражения или обратного вызова в контексте данного компонента. | CComponent |
| getEventHandlers() | Возвращает список присоединённых обработчиков событий для события. | CComponent |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверка, есть ли присоединённые обработчики для указанного события. | CComponent |
| hasProperty() | Определение наличия свойства. | CComponent |
| mergeWith() | Объединение с другими критериями. | CDbCriteria |
| raiseEvent() | Вызывает событие. | CComponent |
| toArray() | CDbCriteria |
Подробное описание свойств
alias свойство
public string $alias;
имя псевдонима таблицы. Если не задано, псевдоним равен 't'.
condition свойство
public string $condition;
условие запроса. Это относится к условию WHERE в SQL-запросе. Например, age>31 AND team=1.
distinct свойство
public boolean $distinct;
выбрать только уникальные строки данных. Если установлено в true, в операторе SELECT будет добавлено DISTINCT.
group свойство
public string $group;
группировка результатов запроса. Это относится к условию GROUP BY в SQL-запросе. Например, 'projectID, teamID'.
having свойство
public string $having;
условие, применяемое к условию GROUP-BY. Например, 'SUM(revenue)<50000'.
index свойство (доступно начиная с v1.1.5)
public string $index;
имя атрибута AR, значение которого должно использоваться в качестве индекса массива результатов запроса. По умолчанию null, что означает, что массив результатов будет иметь нумерацию с нуля.
join свойство
public string $join;
соединение с другими таблицами. Это относится к условию JOIN в SQL-запросе. Например, 'LEFT JOIN users ON users.id=authorID'.
limit свойство
public integer $limit;
максимальное количество возвращаемых записей. Если меньше 0, значит, ограничений нет.
offset свойство
public integer $offset;
смещение с нуля, с которого следует возвращать записи. Если меньше 0, значит, начинать с начала.
order свойство
public string $order;
способ сортировки результатов запроса. Это относится к условию ORDER BY в SQL-запросе.
paramCount свойство
public static integer $paramCount;
глобальный счётчик анонимных параметров привязки. Этот счётчик используется для генерации имени анонимных параметров.
params свойство
public array $params;
список значений параметров запроса, индексированных по заполнительным параметрам. Например, array(':name'=>'Dan', ':age'=>31).
scopes свойство (доступно начиная с v1.1.7)
public mixed $scopes;
применяемые области
Это свойство эффективно только при передаче критериев в один из следующих методов:
- CActiveRecord::find()
- CActiveRecord::findAll()
- CActiveRecord::findByPk()
- CActiveRecord::findAllByPk()
- CActiveRecord::findByAttributes()
- CActiveRecord::findAllByAttributes()
- CActiveRecord::count()
Может быть установлено в одно из следующих значений:
- Одна область: $criteria->scopes='scopeName';
- Несколько областей: $criteria->scopes=array('scopeName1','scopeName2');
- Область с параметрами: $criteria->scopes=array('scopeName'=>array($params));
- Несколько областей с параметрами: $criteria->scopes=array('scopeName1'=>array($params1),'scopeName2'=>array($params2));
- Несколько областей с одинаковым именем: array(array('scopeName'=>array($params1)),array('scopeName'=>array($params2)));
select свойство
public mixed $select;
выбираемые столбцы. Это относится к предложению SELECT в операторе SQL. Свойство может быть строкой (имена столбцов, разделенные запятыми) или массивом имён столбцов. По умолчанию равно «*», что означает все столбцы.
together свойство (доступно начиная с v1.1.4)
public boolean $together;
указывает, должны ли внешние таблицы быть объединены с основной таблицей в одном SQL-запросе. Это свойство используется только в запросах реляционных AR для отношений HAS_MANY и MANY_MANY.
При установке этого свойства в значение true, для реляционного AR-запроса будет выполнен только один SQL-запрос, даже если основная таблица ограничена, а отношение между внешней таблицей и основной таблицей является многие-к-одному.
При установке этого свойства в значение false, для каждого отношения HAS_MANY будет выполняться отдельный SQL-запрос.
Если свойство не установлено, при ограничении или постраничном отображении основной таблицы, для каждого отношения HAS_MANY будет выполняться отдельный SQL-запрос. В противном случае для всех отношений будет выполнен один SQL-запрос.
with свойство (доступно начиная с v1.1.0)
public mixed $with;
критерии реляционного запроса. Используется для получения связанных объектов при ленивой загрузке. Это свойство эффективно только при передаче критериев в качестве параметра следующим методам CActiveRecord:
- CActiveRecord::find()
- CActiveRecord::findAll()
- CActiveRecord::findByPk()
- CActiveRecord::findAllByPk()
- CActiveRecord::findByAttributes()
- CActiveRecord::findAllByAttributes()
- CActiveRecord::count()
Подробное описание методов
__construct() метод
public void __construct(array $data=array ( )) | ||
| $data | массив | начальные значения свойств критериев (индексированные по имени свойства) |
public function __construct($data=array())
{
foreach($data as $name=>$value)
$this->$name=$value;
}
Конструктор.
__wakeup() метод (доступен начиная с v1.1.9)
public void __wakeup() |
public function __wakeup()
{
$map=array();
$params=array();
foreach($this->params as $name=>$value)
{
if(strpos($name,self::PARAM_PREFIX)===0)
{
$newName=self::PARAM_PREFIX.self::$paramCount++;
$map[$name]=$newName;
}
else
{
$newName=$name;
}
$params[$newName]=$value;
}
if (!empty($map))
{
$sqlContentFieldNames=array(
'select',
'condition',
'order',
'group',
'join',
'having',
);
foreach($sqlContentFieldNames as $field)
{
if(is_array($this->$field))
foreach($this->$field as $k=>$v)
$this->{$field}[$k]=strtr($v,$map);
else
$this->$field=strtr($this->$field,$map);
}
}
$this->params=$params;
}
Переназначение параметров критериев при десериализации для предотвращения столкновений имён.
addBetweenCondition() метод (доступен начиная с v1.1.2)
public static addBetweenCondition(string $column, string $valueStart, string $valueEnd, string $operator='AND') | ||
| $column | строка | имя столбца для поиска в диапазоне. |
| $valueStart | строка | начальное значение для начала поиска в диапазоне. |
| $valueEnd | строка | конечное значение для окончания поиска в диапазоне. |
| $operator | строка | оператор для конкатенации нового условия с существующим. По умолчанию 'И'. |
| {return} | статический | сам объект критериев |
public function addBetweenCondition($column,$valueStart,$valueEnd,$operator='AND')
{
if($valueStart==='' || $valueEnd==='')
return $this;
$paramStart=self::PARAM_PREFIX.self::$paramCount++;
$paramEnd=self::PARAM_PREFIX.self::$paramCount++;
$this->params[$paramStart]=$valueStart;
$this->params[$paramEnd]=$valueEnd;
$condition="$column BETWEEN $paramStart AND $paramEnd";
return $this->addCondition($condition,$operator);
}
Добавляет условие между значениями в свойство condition.
Новое условие между значениями и существующее условие будут конкатенированы с указанным оператором, по умолчанию 'И'. Если одно или оба значения пустые, условие не добавляется к существующему условию. Этот метод обрабатывает случай, когда существующее условие пустое. После вызова этого метода, свойство condition будет изменено.
addColumnCondition() метод
public static addColumnCondition(array $columns, string $columnOperator='AND', string $operator='AND') | ||
| $columns | массив | список имён столбцов и значений для сопоставления (имя=>значение) |
| $columnOperator | строка | оператор для конкатенации условий сопоставления нескольких столбцов. По умолчанию 'И'. |
| $operator | строка | оператор для конкатенации нового условия с существующим. По умолчанию 'И'. |
| {return} | статический | сам объект критериев |
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.self::$paramCount;
$this->params[self::PARAM_PREFIX.self::$paramCount++]=$value;
}
}
return $this->addCondition(implode(" $columnOperator ",$params), $operator);
}
Добавляет условие для сопоставления заданного списка значений столбцов. Сгенерированное условие будет добавленно к существующему condition с указанным оператором, по умолчанию 'И'. Условие генерируется путем сопоставления каждого столбца и соответствующего значения.
addCondition() метод
public static addCondition(mixed $condition, string $operator='AND') | ||
| $condition | смешанный тип | новое условие. Может быть строкой или массивом строк. |
| $operator | строка | оператор для объединения различных условий. По умолчанию 'И'. |
| {return} | статический | сам объект критериев |
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;
}
Добавляет условие к существующему condition. Новое условие и существующее условие будут объединены с указанным оператором, по умолчанию 'И'. Новое условие также может быть массивом. В этом случае все элементы массива будут объединены вместе с помощью оператора. Этот метод обрабатывает случай, когда существующее условие пустое. После вызова этого метода, свойство condition будет изменено.
addInCondition() метод
public static addInCondition(string $column, array $values, string $operator='AND') | ||
| $column | строка | имя столбца (или допустимое SQL-выражение) |
| $values | массив | список значений, в которых должно находиться значение столбца |
| $operator | строка | оператор для конкатенации нового условия с существующим. По умолчанию 'И'. |
| {return} | статический | сам объект критериев |
public function addInCondition($column,$values,$operator='AND')
{
if(($n=count($values))<1)
$condition='0=1'; // 0=1 is used because in MSSQL value alone can't be used in WHERE
elseif($n===1)
{
$value=reset($values);
if($value===null)
$condition=$column.' IS NULL';
else
{
$condition=$column.'='.self::PARAM_PREFIX.self::$paramCount;
$this->params[self::PARAM_PREFIX.self::$paramCount++]=$value;
}
}
else
{
$params=array();
foreach($values as $value)
{
$params[]=self::PARAM_PREFIX.self::$paramCount;
$this->params[self::PARAM_PREFIX.self::$paramCount++]=$value;
}
$condition=$column.' IN ('.implode(', ',$params).')';
}
return $this->addCondition($condition,$operator);
}
Добавляет условие IN к существующему condition. Условие IN и существующее условие будут объединены с указанным оператором, по умолчанию 'И'. Условие IN генерируется с использованием оператора SQL IN, который требует, чтобы указанное значение столбца входило в предоставленный список значений.
addNotInCondition() метод (доступен начиная с v1.1.1)
public static addNotInCondition(string $column, array $values, string $operator='AND') | ||
| $column | строка | имя столбца (или допустимое SQL-выражение) |
| $values | массив | список значений, в которых не должно находиться значение столбца |
| $operator | строка | оператор для конкатенации нового условия с существующим. По умолчанию 'И'. |
| {return} | статический | сам объект критериев |
public function addNotInCondition($column,$values,$operator='AND')
{
if(($n=count($values))<1)
return $this;
if($n===1)
{
$value=reset($values);
if($value===null)
$condition=$column.' IS NOT NULL';
else
{
$condition=$column.'!='.self::PARAM_PREFIX.self::$paramCount;
$this->params[self::PARAM_PREFIX.self::$paramCount++]=$value;
}
}
else
{
$params=array();
foreach($values as $value)
{
$params[]=self::PARAM_PREFIX.self::$paramCount;
$this->params[self::PARAM_PREFIX.self::$paramCount++]=$value;
}
$condition=$column.' NOT IN ('.implode(', ',$params).')';
}
return $this->addCondition($condition,$operator);
}
Добавляет условие NOT IN к существующему condition. Условие NOT IN и существующее условие будут объединены с указанным оператором, по умолчанию 'И'. Условие NOT IN генерируется с использованием оператора SQL NOT IN, который требует, чтобы указанное значение столбца не входило в предоставленный список значений.
addSearchCondition() метод
public static addSearchCondition(string $column, string $keyword, boolean $escape=true, string $operator='AND', string $like='LIKE') | ||
| $column | string | имя столбца (или допустимое SQL выражение) |
| $keyword | string | ключевое слово для поиска. Эта интерпретация ключевого слова зависит от следующего параметра. |
| $escape | boolean | нужно ли экранировать ключевое слово, если оно содержит символы % или _. Если этот параметр имеет значение true (по умолчанию), специальные символы % (соответствует 0 или более символам) и _ (соответствует одному символу) будут экранированы, а само ключевое слово будет окружено символом %. Если этот параметр имеет значение false, ключевое слово будет использовано для сопоставления непосредственно без изменений. |
| $operator | string | оператор, используемый для конкатенации нового условия с существующим. По умолчанию равен 'AND'. |
| $like | string | оператор LIKE. По умолчанию равен 'LIKE'. Также можно установить значение 'NOT LIKE'. |
| {return} | static | объект критериев |
public function addSearchCondition($column,$keyword,$escape=true,$operator='AND',$like='LIKE')
{
if($keyword=='')
return $this;
if($escape)
$keyword='%'.strtr($keyword,array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%';
$condition=$column." $like ".self::PARAM_PREFIX.self::$paramCount;
$this->params[self::PARAM_PREFIX.self::$paramCount++]=$keyword;
return $this->addCondition($condition, $operator);
}
Добавляет условие поиска к существующему условию. Условие поиска и существующее условие будут конкатенированы с помощью указанного оператора, который по умолчанию равен 'AND'. Условие поиска генерируется с помощью оператора SQL LIKE с заданным именем столбца и ключевым словом поиска.
compare() метод (доступен с v1.1.1)
public static compare(string $column, mixed $value, boolean $partialMatch=false, string $operator='AND', boolean $escape=true) | ||
| $column | string | имя столбца для поиска |
| $value | mixed | значение столбца, с которым сравнивается. Если значение является строкой, выполняется интеллектуальное сравнение. Если значение является массивом, сравнение выполняется по точному совпадению любого значения в массиве. Если строка или массив пустые, существующее условие поиска не изменяется. |
| $partialMatch | boolean | указывает, должно ли значение учитывать частичное соответствие текста (используя операторы LIKE и NOT LIKE). По умолчанию false, что означает точное сравнение. |
| $operator | string | оператор, используемый для конкатенации нового условия с существующим. По умолчанию равен 'AND'. |
| $escape | boolean | нужно ли экранировать значение, если $partialMatch имеет значение true и значение содержит символы % или _. Если этот параметр имеет значение true (по умолчанию), специальные символы % (соответствует 0 или более символам) и _ (соответствует одному символу) будут экранированы, а само значение будет окружено символом %. Если этот параметр имеет значение false, значение будет использовано для сопоставления непосредственно без изменений. |
| {return} | static | объект критериев |
public function compare($column, $value, $partialMatch=false, $operator='AND', $escape=true)
{
if(is_array($value))
{
if($value===array())
return $this;
return $this->addInCondition($column,$value,$operator);
}
else
$value="$value";
if(preg_match('/^(?:\s*(<>|<=|>=|<|>|=))?(.*)$/',$value,$matches))
{
$value=$matches[2];
$op=$matches[1];
}
else
$op='';
if($value==='')
return $this;
if($partialMatch)
{
if($op==='')
return $this->addSearchCondition($column,$value,$escape,$operator);
if($op==='<>')
return $this->addSearchCondition($column,$value,$escape,$operator,'NOT LIKE');
}
elseif($op==='')
$op='=';
$this->addCondition($column.$op.self::PARAM_PREFIX.self::$paramCount,$operator);
$this->params[self::PARAM_PREFIX.self::$paramCount++]=$value;
return $this;
}
Добавляет выражение сравнения к свойству condition.
Этот метод — это вспомогательная функция, которая добавляет к свойству condition новое выражение сравнения. Сравнение выполняется путём сравнения столбца со заданным значением с помощью оператора сравнения.
Оператор сравнения определяется интеллектуально на основе первых нескольких символов в заданном значении. В частности, он распознаёт следующие операторы, если они появляются в качестве начальных символов в заданном значении:
-
<: столбец должен быть меньше заданного значения. -
>: столбец должен быть больше заданного значения. -
<=: столбец должен быть меньше или равен заданному значению. -
>=: столбец должен быть больше или равен заданному значению. -
<>: столбец не должен быть таким же, как заданное значение. Обратите внимание, что, когда $partialMatch имеет значение true, это означает, что значение не должно быть подстрокой столбца. -
=: столбец должен быть равен заданному значению. - ни один из вышеперечисленных: столбец должен быть равен заданному значению. Обратите внимание, что, когда $partialMatch имеет значение true, это означает, что значение должно быть таким же, как заданное значение, или быть его подстрокой.
Обратите внимание, что все окружающие пробелы будут удалены из значения перед сравнением. Если значение пустое, к условию поиска не будет добавлено никакого выражения сравнения.
mergeWith() метод
public void mergeWith(mixed $criteria, string|boolean $operator='AND') | ||
| $criteria | mixed | критерии для объединения. Может быть массивом или объектом CDbCriteria. |
| $operator | string|boolean | оператор, используемый для конкатенации условий WHERE и HAVING. По умолчанию равен 'AND'. Для обратной совместимости можно передать логическое значение: - 'false' для 'OR' - 'true' для 'AND' |
public function mergeWith($criteria,$operator='AND')
{
if(is_bool($operator))
$operator=$operator ? 'AND' : 'OR';
if(is_array($criteria))
$criteria=new self($criteria);
if($this->select!==$criteria->select)
{
if($this->select==='*'||$this->select===false)
$this->select=$criteria->select;
elseif($criteria->select===false)
$this->select=false;
elseif($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;
elseif($criteria->condition!=='')
$this->condition="({$this->condition}) $operator ({$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($criteria->alias!==null)
$this->alias=$criteria->alias;
if($this->order!==$criteria->order)
{
if($this->order==='')
$this->order=$criteria->order;
elseif($criteria->order!=='')
$this->order=$criteria->order.', '.$this->order;
}
if($this->group!==$criteria->group)
{
if($this->group==='')
$this->group=$criteria->group;
elseif($criteria->group!=='')
$this->group.=', '.$criteria->group;
}
if($this->join!==$criteria->join)
{
if($this->join==='')
$this->join=$criteria->join;
elseif($criteria->join!=='')
$this->join.=' '.$criteria->join;
}
if($this->having!==$criteria->having)
{
if($this->having==='')
$this->having=$criteria->having;
elseif($criteria->having!=='')
$this->having="({$this->having}) $operator ({$criteria->having})";
}
if($criteria->distinct>0)
$this->distinct=$criteria->distinct;
if($criteria->together!==null)
$this->together=$criteria->together;
if($criteria->index!==null)
$this->index=$criteria->index;
if(empty($this->scopes))
$this->scopes=$criteria->scopes;
elseif(!empty($criteria->scopes))
{
$scopes1=(array)$this->scopes;
$scopes2=(array)$criteria->scopes;
foreach($scopes1 as $k=>$v)
{
if(is_integer($k))
$scopes[]=$v;
elseif(isset($scopes2[$k]))
$scopes[]=array($k=>$v);
else
$scopes[$k]=$v;
}
foreach($scopes2 as $k=>$v)
{
if(is_integer($k))
$scopes[]=$v;
elseif(isset($scopes1[$k]))
$scopes[]=array($k=>$v);
else
$scopes[$k]=$v;
}
$this->scopes=$scopes;
}
if(empty($this->with))
$this->with=$criteria->with;
elseif(!empty($criteria->with))
{
$this->with=(array)$this->with;
foreach((array)$criteria->with as $k=>$v)
{
if(is_integer($k))
$this->with[]=$v;
elseif(isset($this->with[$k]))
{
$excludes=array();
foreach(array('joinType','on') as $opt)
{
if(isset($this->with[$k][$opt]))
$excludes[$opt]=$this->with[$k][$opt];
if(isset($v[$opt]))
$excludes[$opt]= ($opt==='on' && isset($excludes[$opt]) && $v[$opt]!==$excludes[$opt]) ?
"($excludes[$opt]) AND $v[$opt]" : $v[$opt];
unset($this->with[$k][$opt]);
unset($v[$opt]);
}
$this->with[$k]=new self($this->with[$k]);
$this->with[$k]->mergeWith($v,$operator);
$this->with[$k]=$this->with[$k]->toArray();
if (count($excludes)!==0)
$this->with[$k]=CMap::mergeArray($this->with[$k],$excludes);
}
else
$this->with[$k]=$v;
}
}
}
Объединяет с другими критериями. В общем случае, объединение делает результирующие критерии более строгими. Например, если у обоих наборов критериев есть условия, они будут объединены с помощью 'AND'. Кроме того, критерии, переданные в качестве параметра, имеют приоритет в случае, если два варианта нельзя объединить (например, LIMIT, OFFSET).
toArray() метод
public array toArray() | ||
| {return} | array | массивная представление критериев |
public function toArray()
{
$result=array();
foreach(array('select', 'condition', 'params', 'limit', 'offset', 'order', 'group', 'join', 'having', 'distinct', 'scopes', 'with', 'alias', 'index', 'together') as $name)
$result[$name]=$this->$name;
return $result;
}
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbCriteria