Spec-Zone.ru › Yii 1.1

CDbCriteria

Пакет system.db.schema
Наследование class CDbCriteria » CComponent
С версии 1.0
Исходный код framework/db/schema/CDbCriteria.php
CDbCriteria представляет критерии запроса, такие как условия, сортировка, лимит/смещение.

Его можно использовать в методах запроса 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 смешанный тип применяемые области видимости

Это свойство эффективно только при передаче критериев одному из следующих методов:
  • 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)));
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()
Значение свойства будет использовано как параметр для метода CActiveRecord::with() для выполнения ленивой загрузки. Для указания этого параметра см. CActiveRecord::with().

Подробное описание методов

__construct() метод

public void __construct(array $data=array ( ))
$data массив начальные значения свойств критериев (индексированные по имени свойства)
Исходный код: framework/db/schema/CDbCriteria.php#157 (показать)
public function __construct($data=array())
{
    foreach(
$data as $name=>$value)
        
$this->$name=$value;
}

Конструктор.

__wakeup() метод (доступен начиная с v1.1.9)

public void __wakeup()
Исходный код: framework/db/schema/CDbCriteria.php#167 (показать)
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} статический сам объект критериев
Исходный код: framework/db/schema/CDbCriteria.php#468 (показать)
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} статический сам объект критериев
Исходный код: framework/db/schema/CDbCriteria.php#354 (показать)
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} статический сам объект критериев
Исходный код: framework/db/schema/CDbCriteria.php#218 (показать)
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} статический сам объект критериев
Исходный код: framework/db/schema/CDbCriteria.php#274 (показать)
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} статический сам объект критериев
Исходный код: framework/db/schema/CDbCriteria.php#315 (показать)
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 объект критериев
Исходный код: framework/db/schema/CDbCriteria.php#251 (показать)
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 объект критериев
Исходный код: framework/db/schema/CDbCriteria.php#414 (показать)
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'
Исходный код: framework/db/schema/CDbCriteria.php#494 (показать)
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 массивная представление критериев
Исходный код: framework/db/schema/CDbCriteria.php#639 (показать)
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API