Spec-Zone.ru › Yii 1.1

CDbCommandBuilder

Пакет system.db.schema
Наследование class CDbCommandBuilder » CComponent
Подклассы CMssqlCommandBuilder, CMysqlCommandBuilder, COciCommandBuilder, CPgsqlCommandBuilder, CSqliteCommandBuilder
С момента 1.0
Исходный код framework/db/schema/CDbCommandBuilder.php
CDbCommandBuilder предоставляет базовые методы для создания команд запросов к таблицам.

Общественные свойства

Свойство Тип Описание Определено
dbConnection CDbConnection соединение с базой данных. CDbCommandBuilder
schema CDbSchema схема для этого билдера команд. CDbCommandBuilder

Защищенные свойства

Свойство Тип Описание Определено
integerPrimaryKeyDefaultValue строка Возвращает значение по умолчанию для целочисленного/последовательного первичного ключа. Значение по умолчанию означает, что следующее CDbCommandBuilder

Общие методы

Метод Описание Определено в
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__construct() CDbCommandBuilder
__get() Возвращает значение свойства, список обработчиков событий или поведение по его имени. CComponent
__isset() Проверяет, является ли значение свойства null. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в null. CComponent
applyCondition() Изменяет SQL для применения условия WHERE. CDbCommandBuilder
applyGroup() Изменяет SQL для применения GROUP BY. CDbCommandBuilder
applyHaving() Изменяет SQL для применения HAVING. CDbCommandBuilder
applyJoin() Изменяет SQL для применения условия JOIN. CDbCommandBuilder
applyLimit() Изменяет SQL для применения LIMIT и OFFSET. CDbCommandBuilder
applyOrder() Изменяет SQL для применения ORDER BY. CDbCommandBuilder
asa() Возвращает объект поведения с указанным именем. CComponent
attachBehavior() Прикрепляет поведение к этому компоненту. CComponent
attachBehaviors() Прикрепляет список поведений к компоненту. CComponent
attachEventHandler() Прикрепляет обработчик событий к событию. CComponent
bindValues() Привязывает значения параметров для SQL команды. CDbCommandBuilder
canGetProperty() Определяет, можно ли прочитать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
createColumnCriteria() Создаёт критерии запроса со значениями указанных столбцов. CDbCommandBuilder
createCountCommand() Создаёт команду COUNT(*) для одной таблицы. CDbCommandBuilder
createCriteria() Создаёт критерии запроса. CDbCommandBuilder
createDeleteCommand() Создаёт команду DELETE. CDbCommandBuilder
createFindCommand() Создаёт команду SELECT для одной таблицы. CDbCommandBuilder
createInCondition() Генерирует выражение для выбора строк с указанными значениями первичного ключа. CDbCommandBuilder
createInsertCommand() Создаёт команду INSERT. CDbCommandBuilder
createMultipleInsertCommand() Создаёт команду множественного INSERT. CDbCommandBuilder
createPkCondition() Генерирует выражение для выбора строк с указанными значениями первичного ключа. CDbCommandBuilder
createPkCriteria() Создаёт критерии запроса с указанным первичным ключом. CDbCommandBuilder
createSearchCondition() Генерирует выражение для поиска указанных ключевых слов в списке столбцов. CDbCommandBuilder
createSqlCommand() Создаёт команду на основе заданного SQL-запроса. CDbCommandBuilder
createUpdateCommand() Создаёт команду UPDATE. CDbCommandBuilder
createUpdateCounterCommand() Создаёт команду UPDATE, которая увеличивает/уменьшает определённые столбцы. CDbCommandBuilder
detachBehavior() Открепляет поведение от компонента. CComponent
detachBehaviors() Открепляет все поведения от компонента. CComponent
detachEventHandler() Открепляет существующий обработчик событий. CComponent
disableBehavior() Отключает прикреплённое поведение. CComponent
disableBehaviors() Отключает все прикреплённые к этому компоненту поведения. CComponent
enableBehavior() Включает прикреплённое поведение. CComponent
enableBehaviors() Включает все прикреплённые к этому компоненту поведения. CComponent
evaluateExpression() Вычисляет PHP выражение или колбэк в контексте этого компонента. CComponent
getDbConnection() Возвращает подключение к базе данных. CDbCommandBuilder
getEventHandlers() Возвращает список прикреплённых обработчиков событий для события. CComponent
getLastInsertID() Возвращает последний ID вставки для указанной таблицы. CDbCommandBuilder
getSchema() Возвращает схему для этого генератора команд. CDbCommandBuilder
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли прикреплённые обработчики для события с указанным именем. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
raiseEvent() Вызывает событие. CComponent

Защищённые методы

Метод Описание Определено в
composeMultipleInsertCommand() Создаёт команду множественного INSERT. CDbCommandBuilder
createCompositeInCondition() Генерирует выражение для выбора строк с указанными значениями составного ключа. CDbCommandBuilder
ensureTable() Проверяет, является ли параметр корректной схемой таблицы. CDbCommandBuilder
getIntegerPrimaryKeyDefaultValue() Возвращает значение по умолчанию для первичного ключа типа integer/serial. Значение по умолчанию означает, что следующее CDbCommandBuilder

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

dbConnection свойство только для чтения

public CDbConnection getDbConnection()

Подключение к базе данных.

integerPrimaryKeyDefaultValue свойство только для чтения (доступно с версии v1.1.14)

protected string getIntegerPrimaryKeyDefaultValue()

Возвращает значение по умолчанию для целочисленного/последовательного первичного ключа. Значение по умолчанию означает, что будет использовано следующее значение автоинкремента/последовательности.

schema свойство только для чтения

public CDbSchema getSchema()

схема для этого билдера команд.

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

__construct() метод

public void __construct(CDbSchema $schema)
$schema CDbSchema схема для этого билдера команд
Исходный код: framework/db/schema/CDbCommandBuilder.php#31 (показать)
public function __construct($schema)
{
    
$this->_schema=$schema;
    
$this->_connection=$schema->getDbConnection();
}

applyCondition() метод

public string applyCondition(string $sql, string $condition)
$sql строка SQL-запрос без условия WHERE
$condition строка условие WHERE (без ключевого слова WHERE)
{return} строка изменённый SQL-запрос
Исходный код: framework/db/schema/CDbCommandBuilder.php#481 (показать)
public function applyCondition($sql,$condition)
{
    if(
$condition!='')
        return 
$sql.' WHERE '.$condition;
    else
        return 
$sql;
}

Изменяет SQL-запрос для применения условия WHERE.

applyGroup() метод

public string applyGroup(string $sql, string $group)
$sql строка SQL-запрос без GROUP BY.
$group строка GROUP BY
{return} строка SQL с GROUP BY.
Исходный код: framework/db/schema/CDbCommandBuilder.php#526 (показать)
public function applyGroup($sql,$group)
{
    if(
$group!='')
        return 
$sql.' GROUP BY '.$group;
    else
        return 
$sql;
}

Изменяет SQL-запрос для применения GROUP BY.

applyHaving() метод

public string applyHaving(string $sql, string $having)
$sql строка SQL-запрос без HAVING
$having строка HAVING
{return} строка SQL с HAVING
Исходный код: framework/db/schema/CDbCommandBuilder.php#540 (показать)
public function applyHaving($sql,$having)
{
    if(
$having!='')
        return 
$sql.' HAVING '.$having;
    else
        return 
$sql;
}

Изменяет SQL-запрос для применения HAVING.

applyJoin() метод

public string applyJoin(string $sql, string $join)
$sql строка SQL-запрос, который нужно изменить
$join строка оператор JOIN (начинается с типа JOIN, например INNER JOIN)
{return} строка изменённый SQL-запрос
Исходный код: framework/db/schema/CDbCommandBuilder.php#467 (показать)
public function applyJoin($sql,$join)
{
    if(
$join!='')
        return 
$sql.' '.$join;
    else
        return 
$sql;
}

Изменяет SQL-запрос для применения условия JOIN.

applyLimit() метод

public string applyLimit(string $sql, integer $limit, integer $offset)
$sql строка SQL-запрос без LIMIT и OFFSET.
$limit целое число максимальное количество строк, -1 для игнорирования ограничения.
$offset целое число смещение строки, -1 для игнорирования смещения.
{return} строка SQL с LIMIT и OFFSET
Исходный код: framework/db/schema/CDbCommandBuilder.php#511 (показать)
public function applyLimit($sql,$limit,$offset)
{
    if(
$limit>=0)
        
$sql.=' LIMIT '.(int)$limit;
    if(
$offset>0)
        
$sql.=' OFFSET '.(int)$offset;
    return 
$sql;
}

Изменяет SQL-запрос для применения LIMIT и OFFSET. По умолчанию реализация применима для PostgreSQL, MySQL, MariaDB и SQLite.

applyOrder() метод

public string applyOrder(string $sql, string $orderBy)
$sql строка SQL-запрос без ORDER BY.
$orderBy строка сортировка столбцов
{return} строка изменённый SQL с применением ORDER BY.
Исходный код: framework/db/schema/CDbCommandBuilder.php#495 (показать)
public function applyOrder($sql,$orderBy)
{
    if(
$orderBy!='')
        return 
$sql.' ORDER BY '.$orderBy;
    else
        return 
$sql;
}

Изменяет SQL-запрос для применения ORDER BY.

bindValues() метод

public void bindValues(CDbCommand $command, array $values)
$command CDbCommand команда базы данных
$values массив значения для привязки (массив с целочисленными индексами для подстановки вопросительных знаков, массив с строковыми индексами для именованных подстановок)
Исходный код: framework/db/schema/CDbCommandBuilder.php#553 (показать)
public function bindValues($command, $values)
{
    if((
$n=count($values))===0)
        return;
    if(isset(
$values[0])) // question mark placeholders
    
{
        for(
$i=0;$i<$n;++$i)
            
$command->bindValue($i+1,$values[$i]);
    }
    else 
// named placeholders
    
{
        foreach(
$values as $name=>$value)
        {
            if(
$name[0]!==':')
                
$name=':'.$name;
            
$command->bindValue($name,$value);
        }
    }
}

Привязывает значения параметров к SQL-команде.

composeMultipleInsertCommand() метод

protected CDbCommand composeMultipleInsertCommand(mixed $table, array $data, array $templates=array ( ))
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$data массив список данных для вставки, каждое значение должно быть массивом в формате (имя столбца=>значение столбца). Если ключ не является допустимым именем столбца, соответствующее значение будет проигнорировано.
$templates массив шаблоны для частей SQL.
{return} CDbCommand команда множественной вставки
Исходный код: framework/db/schema/CDbCommandBuilder.php#278 (показать)
protected function composeMultipleInsertCommand($table,array $data,array $templates=array())
{
    if (empty(
$data))
        throw new 
CDbException(Yii::t('yii','Can not generate multiple insert command with empty data set.'));
    
$templates=array_merge(
        array(
            
'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) VALUES {{rowInsertValues}}',
            
'columnInsertValue'=>'{{value}}',
            
'columnInsertValueGlue'=>', ',
            
'rowInsertValue'=>'({{columnInsertValues}})',
            
'rowInsertValueGlue'=>', ',
            
'columnInsertNameGlue'=>', ',
        ),
        
$templates
    
);
    
$this->ensureTable($table);
    
$tableName=$table->rawName;
    
$params=array();
    
$columnInsertNames=array();
    
$rowInsertValues=array();

    
$columns=array();
    foreach(
$data as $rowData)
    {
        foreach(
$rowData as $columnName=>$columnValue)
        {
            if(!
in_array($columnName,$columns,true))
                if(
$table->getColumn($columnName)!==null)
                    
$columns[]=$columnName;
        }
    }
    foreach(
$columns as $name)
        
$columnInsertNames[$name]=$this->getDbConnection()->quoteColumnName($name);
    
$columnInsertNamesSqlPart=implode($templates['columnInsertNameGlue'],$columnInsertNames);

    foreach(
$data as $rowKey=>$rowData)
    {
        
$columnInsertValues=array();
        foreach(
$columns as $columnName)
        {
            
$column=$table->getColumn($columnName);
            
$columnValue=array_key_exists($columnName,$rowData) ? $rowData[$columnName] : new CDbExpression('NULL');
            if(
$columnValue instanceof CDbExpression)
            {
                
$columnInsertValue=$columnValue->expression;
                foreach(
$columnValue->params as $columnValueParamName=>$columnValueParam)
                    
$params[$columnValueParamName]=$columnValueParam;
            }
            else
            {
                
$columnInsertValue=':'.$columnName.'_'.$rowKey;
                
$params[':'.$columnName.'_'.$rowKey]=$column->typecast($columnValue);
            }
            
$columnInsertValues[]=strtr($templates['columnInsertValue'],array(
                
'{{column}}'=>$columnInsertNames[$columnName],
                
'{{value}}'=>$columnInsertValue,
            ));
        }
        
$rowInsertValues[]=strtr($templates['rowInsertValue'],array(
            
'{{tableName}}'=>$tableName,
            
'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
            
'{{columnInsertValues}}'=>implode($templates['columnInsertValueGlue'],$columnInsertValues)
        ));
    }

    
$sql=strtr($templates['main'],array(
        
'{{tableName}}'=>$tableName,
        
'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
        
'{{rowInsertValues}}'=>implode($templates['rowInsertValueGlue'], $rowInsertValues),
    ));
    
$command=$this->getDbConnection()->createCommand($sql);

    foreach(
$params as $name=>$value)
        
$command->bindValue($name,$value);

    return 
$command;
}

Создаёт команду множественной вставки. Этот метод формирует SQL-выражение с помощью заданных шаблонов частей, предоставляя возможность адаптировать команду для разных синтаксисов SQL.

createColumnCriteria() метод

public CDbCriteria createColumnCriteria(mixed $table, array $columns, mixed $condition='', array $params=array ( ), string $prefix=NULL)
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$columns массив значения столбцов, которые должны быть сопоставлены в запросе (имя=>значение)
$condition смешанный тип условие запроса или критерии. Если строка, она обрабатывается как условие запроса; Если массив, она обрабатывается как начальные значения для построения CDbCriteria; В противном случае это должен быть экземпляр CDbCriteria.
$params массив параметры, которые необходимо привязать к SQL-запросу. Это используется только когда третий параметр является строкой (условие запроса). В других случаях используйте CDbCriteria::params для задания параметров.
$prefix строка префикс столбца (заканчивается точкой). Если null, будет использовано имя таблицы
{return} CDbCriteria созданные критерии запроса
Исходный код: framework/db/schema/CDbCommandBuilder.php#661 (показать)
public function createColumnCriteria($table,$columns,$condition='',$params=array(),$prefix=null)
{
    
$this->ensureTable($table);
    
$criteria=$this->createCriteria($condition,$params);
    if(
$criteria->alias!='')
        
$prefix=$this->_schema->quoteTableName($criteria->alias).'.';
    
$bindByPosition=isset($criteria->params[0]);
    
$conditions=array();
    
$values=array();
    
$i=0;
    if(
$prefix===null)
        
$prefix=$table->rawName.'.';
    foreach(
$columns as $name=>$value)
    {
        if((
$column=$table->getColumn($name))!==null)
        {
            if(
is_array($value))
                
$conditions[]=$this->createInCondition($table,$name,$value,$prefix);
            elseif(
$value!==null)
            {
                if(
$bindByPosition)
                {
                    
$conditions[]=$prefix.$column->rawName.'=?';
                    
$values[]=$value;
                }
                else
                {
                    
$conditions[]=$prefix.$column->rawName.'='.self::PARAM_PREFIX.$i;
                    
$values[self::PARAM_PREFIX.$i]=$value;
                    
$i++;
                }
            }
            else
                
$conditions[]=$prefix.$column->rawName.' IS NULL';
        }
        else
            throw new 
CDbException(Yii::t('yii','Table "{table}" does not have a column named "{column}".',
                array(
'{table}'=>$table->name,'{column}'=>$name)));
    }
    
$criteria->params=array_merge($values,$criteria->params);
    if(isset(
$conditions[0]))
    {
        if(
$criteria->condition!='')
            
$criteria->condition=implode(' AND ',$conditions).' AND ('.$criteria->condition.')';
        else
            
$criteria->condition=implode(' AND ',$conditions);
    }
    return 
$criteria;
}

Создаёт критерии запроса со значениями указанных столбцов.

createCompositeInCondition() метод

protected string createCompositeInCondition(CDbTableSchema $table, array $values, string $prefix)
$table CDbTableSchema схема таблицы
$values массив список значений первичного ключа для выбора
$prefix строка префикс столбца (заканчивается точкой)
{return} строка выражение для выбора
Исходный код: framework/db/schema/CDbCommandBuilder.php#841 (показать)
protected function createCompositeInCondition($table,$values,$prefix)
{
    
$keyNames=array();
    foreach(
array_keys($values[0]) as $name)
        
$keyNames[]=$prefix.$table->columns[$name]->rawName;
    
$vs=array();
    foreach(
$values as $value)
        
$vs[]='('.implode(', ',$value).')';
    return 
'('.implode(', ',$keyNames).') IN ('.implode(', ',$vs).')';
}

Генерирует выражение для выбора строк со значениями составного ключа.

createCountCommand() метод

public CDbCommand createCountCommand(mixed $table, CDbCriteria $criteria, string $alias='t')
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$criteria CDbCriteria критерии запроса
$alias строка псевдоним основной таблицы. По умолчанию 't'.
{return} CDbCommand команда запроса.
Исходный код: framework/db/schema/CDbCommandBuilder.php#111 (показать)
public function createCountCommand($table,$criteria,$alias='t')
{
    
$this->ensureTable($table);
    if(
$criteria->alias!='')
        
$alias=$criteria->alias;
    
$alias=$this->_schema->quoteTableName($alias);

    if(!empty(
$criteria->group) || !empty($criteria->having))
    {
        
$select=is_array($criteria->select) ? implode(', ',$criteria->select) : $criteria->select;
        if(
$criteria->alias!='')
            
$alias=$criteria->alias;
        
$sql=($criteria->distinct ? 'SELECT DISTINCT':'SELECT')." {$select} FROM {$table->rawName}$alias";
        
$sql=$this->applyJoin($sql,$criteria->join);
        
$sql=$this->applyCondition($sql,$criteria->condition);
        
$sql=$this->applyGroup($sql,$criteria->group);
        
$sql=$this->applyHaving($sql,$criteria->having);
        
$sql="SELECT COUNT(*) FROM ($sql) sq";
    }
    else
    {
        if(
is_string($criteria->select) && stripos($criteria->select,'count')===0)
            
$sql="SELECT ".$criteria->select;
        elseif(
$criteria->distinct)
        {
            if(
is_array($table->primaryKey))
            {
                
$pk=array();
                foreach(
$table->primaryKey as $key)
                    
$pk[]=$alias.'.'.$this->_schema->quoteColumnName($key);
                
$pk=implode(', ',$pk);
            }
            else
                
$pk=$alias.'.'.$this->_schema->quoteColumnName($table->primaryKey);
            
$sql="SELECT COUNT(DISTINCT $pk)";
        }
        else
            
$sql="SELECT COUNT(*)";
        
$sql.=" FROM {$table->rawName}$alias";
        
$sql=$this->applyJoin($sql,$criteria->join);
        
$sql=$this->applyCondition($sql,$criteria->condition);
    }

    
// Suppress binding of parameters belonging to the ORDER clause. Issue #1407.
    
if($criteria->order && $criteria->params)
    {
        
$params1=array();
        
preg_match_all('/(:\w+)/',$sql,$params1);
        
$params2=array();
        
preg_match_all('/(:\w+)/',$this->applyOrder($sql,$criteria->order),$params2);
        foreach(
array_diff($params2[0],$params1[0]) as $param)
            unset(
$criteria->params[$param]);
    }

    
// Do the same for SELECT part.
    
if($criteria->select && $criteria->params)
    {
        
$params1=array();
        
preg_match_all('/(:\w+)/',$sql,$params1);
        
$params2=array();
        
preg_match_all('/(:\w+)/',$sql.' '.(is_array($criteria->select) ? implode(', ',$criteria->select) : $criteria->select),$params2);
        foreach(
array_diff($params2[0],$params1[0]) as $param)
            unset(
$criteria->params[$param]);
    }

    
$command=$this->_connection->createCommand($sql);
    
$this->bindValues($command,$criteria->params);
    return 
$command;
}

Создает команду COUNT(*) для одной таблицы.

createCriteria() метод

public CDbCriteria createCriteria(mixed $condition='', array $params=array ( ))
$condition смешанный тип условие запроса или критерии. Если строка, обрабатывается как условие запроса (оператор WHERE); если массив, обрабатывается как начальные значения для создания объекта CDbCriteria; в противном случае, должен быть экземпляром CDbCriteria.
$params массив параметры, которые будут связаны с SQL-запросом. Используется только когда первый параметр является строкой (условие запроса). В других случаях, пожалуйста, используйте CDbCriteria::params для установки параметров.
{return} CDbCriteria созданные критерии запроса
Исходный код: framework/db/schema/CDbCommandBuilder.php#585 (показать)
public function createCriteria($condition='',$params=array())
{
    if(
is_array($condition))
        
$criteria=new CDbCriteria($condition);
    elseif(
$condition instanceof CDbCriteria)
        
$criteria=clone $condition;
    else
    {
        
$criteria=new CDbCriteria;
        
$criteria->condition=$condition;
        
$criteria->params=$params;
    }
    return 
$criteria;
}

Создает критерии запроса.

createDeleteCommand() метод

public CDbCommand createDeleteCommand(mixed $table, CDbCriteria $criteria)
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$criteria CDbCriteria критерии запроса
{return} CDbCommand команда удаления.
Исходный код: framework/db/schema/CDbCommandBuilder.php#187 (показать)
public function createDeleteCommand($table,$criteria)
{
    
$this->ensureTable($table);
    
$sql="DELETE FROM {$table->rawName}";
    
$sql=$this->applyJoin($sql,$criteria->join);
    
$sql=$this->applyCondition($sql,$criteria->condition);
    
$sql=$this->applyGroup($sql,$criteria->group);
    
$sql=$this->applyHaving($sql,$criteria->having);
    
$sql=$this->applyOrder($sql,$criteria->order);
    
$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);
    
$command=$this->_connection->createCommand($sql);
    
$this->bindValues($command,$criteria->params);
    return 
$command;
}

Создает команду DELETE.

createFindCommand() метод

public CDbCommand createFindCommand(mixed $table, CDbCriteria $criteria, string $alias='t')
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$criteria CDbCriteria критерии запроса
$alias строка псевдоним основной таблицы. По умолчанию 't'.
{return} CDbCommand команда запроса.
Исходный код: framework/db/schema/CDbCommandBuilder.php#74 (показать)
public function createFindCommand($table,$criteria,$alias='t')
{
    
$this->ensureTable($table);
    
$select=is_array($criteria->select) ? implode(', ',$criteria->select) : $criteria->select;
    if(
$criteria->alias!='')
        
$alias=$criteria->alias;
    
$alias=$this->_schema->quoteTableName($alias);

    
// issue 1432: need to expand * when SQL has JOIN
    
if($select==='*' && !empty($criteria->join))
    {
        
$prefix=$alias.'.';
        
$select=array();
        foreach(
$table->getColumnNames() as $name)
            
$select[]=$prefix.$this->_schema->quoteColumnName($name);
        
$select=implode(', ',$select);
    }

    
$sql=($criteria->distinct ? 'SELECT DISTINCT':'SELECT')." {$select} FROM {$table->rawName}$alias";
    
$sql=$this->applyJoin($sql,$criteria->join);
    
$sql=$this->applyCondition($sql,$criteria->condition);
    
$sql=$this->applyGroup($sql,$criteria->group);
    
$sql=$this->applyHaving($sql,$criteria->having);
    
$sql=$this->applyOrder($sql,$criteria->order);
    
$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);
    
$command=$this->_connection->createCommand($sql);
    
$this->bindValues($command,$criteria->params);
    return 
$command;
}

Создает команду SELECT для одной таблицы.

createInCondition() метод

public string createInCondition(mixed $table, mixed $columnName, array $values, string $prefix=NULL)
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$columnName смешанный тип имя столбца(ов). Может быть строкой, обозначающей один столбец, или массивом имён столбцов. В последнем случае, это составной ключ.
$values массив список значений ключа для выбора
$prefix строка префикс столбца (заканчивается точкой). Если null, будет именем таблицы
{return} строка выражение для выбора
Исходный код: framework/db/schema/CDbCommandBuilder.php#763 (показать)
public function createInCondition($table,$columnName,$values,$prefix=null)
{
    if((
$n=count($values))<1)
        return 
'0=1';

    
$this->ensureTable($table);

    if(
$prefix===null)
        
$prefix=$table->rawName.'.';

    
$db=$this->_connection;

    if(
is_array($columnName) && count($columnName)===1)
        
$columnName=reset($columnName);

    if(
is_string($columnName)) // simple key
    
{
        if(!isset(
$table->columns[$columnName]))
            throw new 
CDbException(Yii::t('yii','Table "{table}" does not have a column named "{column}".',
            array(
'{table}'=>$table->name, '{column}'=>$columnName)));
        
$column=$table->columns[$columnName];

        
$values=array_values($values);
        foreach(
$values as &$value)
        {
            
$value=$column->typecast($value);
            if(
is_string($value))
                
$value=$db->quoteValue($value);
        }
        if(
$n===1)
            return 
$prefix.$column->rawName.($values[0]===null?' IS NULL':'='.$values[0]);
        else
            return 
$prefix.$column->rawName.' IN ('.implode(', ',$values).')';
    }
    elseif(
is_array($columnName)) // composite key: $values=array(array('pk1'=>'v1','pk2'=>'v2'),array(...))
    
{
        foreach(
$columnName as $name)
        {
            if(!isset(
$table->columns[$name]))
                throw new 
CDbException(Yii::t('yii','Table "{table}" does not have a column named "{column}".',
                array(
'{table}'=>$table->name, '{column}'=>$name)));

            for(
$i=0;$i<$n;++$i)
            {
                if(isset(
$values[$i][$name]))
                {
                    
$value=$table->columns[$name]->typecast($values[$i][$name]);
                    if(
is_string($value))
                        
$values[$i][$name]=$db->quoteValue($value);
                    else
                        
$values[$i][$name]=$value;
                }
                else
                    throw new 
CDbException(Yii::t('yii','The value for the column "{column}" is not supplied when querying the table "{table}".',
                        array(
'{table}'=>$table->name,'{column}'=>$name)));
            }
        }
        if(
count($values)===1)
        {
            
$entries=array();
            foreach(
$values[0] as $name=>$value)
                
$entries[]=$prefix.$table->columns[$name]->rawName.($value===null?' IS NULL':'='.$value);
            return 
implode(' AND ',$entries);
        }

        return 
$this->createCompositeInCondition($table,$values,$prefix);
    }
    else
        throw new 
CDbException(Yii::t('yii','Column name must be either a string or an array.'));
}

Генерирует выражение для выбора строк со значениями первичного ключа.

createInsertCommand() метод

public CDbCommand createInsertCommand(mixed $table, array $data)
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$data массив данные для вставки (имя столбца=>значение столбца). Если ключ не является допустимым именем столбца, соответствующее значение будет проигнорировано.
{return} CDbCommand команда вставки
Исходный код: framework/db/schema/CDbCommandBuilder.php#208 (показать)
public function createInsertCommand($table,$data)
{
    
$this->ensureTable($table);
    
$fields=array();
    
$values=array();
    
$placeholders=array();
    
$i=0;
    foreach(
$data as $name=>$value)
    {
        if((
$column=$table->getColumn($name))!==null && ($value!==null || $column->allowNull))
        {
            
$fields[]=$column->rawName;
            if(
$value instanceof CDbExpression)
            {
                
$placeholders[]=$value->expression;
                foreach(
$value->params as $n=>$v)
                    
$values[$n]=$v;
            }
            else
            {
                
$placeholders[]=self::PARAM_PREFIX.$i;
                
$values[self::PARAM_PREFIX.$i]=$column->typecast($value);
                
$i++;
            }
        }
    }
    if(
$fields===array())
    {
        
$pks=is_array($table->primaryKey) ? $table->primaryKey : array($table->primaryKey);
        foreach(
$pks as $pk)
        {
            
$fields[]=$table->getColumn($pk)->rawName;
            
$placeholders[]=$this->getIntegerPrimaryKeyDefaultValue();
        }
    }
    
$sql="INSERT INTO {$table->rawName} (".implode(', ',$fields).') VALUES ('.implode(', ',$placeholders).')';
    
$command=$this->_connection->createCommand($sql);

    foreach(
$values as $name=>$value)
        
$command->bindValue($name,$value);

    return 
$command;
}

Создает команду INSERT.

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

public CDbCommand createMultipleInsertCommand(mixed $table, array $data)
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$data массив список данных для вставки, каждое значение должно быть массивом в формате (имя столбца=>значение столбца). Если ключ не является допустимым именем столбца, соответствующее значение будет проигнорировано.
{return} CDbCommand команда множественной вставки
Исходный код: framework/db/schema/CDbCommandBuilder.php#262 (показать)
public function createMultipleInsertCommand($table,array $data)
{
    return 
$this->composeMultipleInsertCommand($table,$data);
}

Создаёт команду множественной вставки. Этот метод может быть использован для достижения лучшей производительности при вставке большого объёма данных в таблицы базы данных.

createPkCondition() метод

public string createPkCondition(mixed $table, array $values, string $prefix=NULL)
$table смешанный тип схема таблицы (CDbTableSchema) или имя таблицы (строка).
$values массив список значений первичного ключа для выбора
$prefix строка префикс столбца (заканчивается точкой). Если null, будет именем таблицы
{return} строка выражение для выбора
Исходный код: framework/db/schema/CDbCommandBuilder.php#640 (показать)
public function createPkCondition($table,$values,$prefix=null)
{
    
$this->ensureTable($table);
    return 
$this->createInCondition($table,$table->primaryKey,$values,$prefix);
}

Генерирует выражение для выбора строк со значениями первичного ключа.

createPkCriteria() метод

public CDbCriteria createPkCriteria(mixed $table, mixed $pk, mixed $condition='', array $params=array ( ), string $prefix=NULL)
$table mixed схема таблицы (CDbTableSchema) или имя таблицы (строка).
$pk mixed значение первичного ключа(ей). Используйте массив для нескольких первичных ключей. Для составного ключа каждое значение ключа должно быть массивом (имя столбца=>значение столбца).
$condition mixed условие запроса или критерии. Если строка, она обрабатывается как условие запроса; если массив, он обрабатывается как начальные значения для построения CDbCriteria; в противном случае это должен быть экземпляр CDbCriteria.
$params массив параметры, которые должны быть привязаны к SQL-запросу. Это используется только тогда, когда второй параметр является строкой (условие запроса). В других случаях, пожалуйста, используйте CDbCriteria::params для установки параметров.
$prefix строка префикс столбца (заканчивается точкой). Если null, он будет именем таблицы.
{return} CDbCriteria созданные критерии запроса
Исходный код: framework/db/schema/CDbCommandBuilder.php#614 (показать)
public function createPkCriteria($table,$pk,$condition='',$params=array(),$prefix=null)
{
    
$this->ensureTable($table);
    
$criteria=$this->createCriteria($condition,$params);
    if(
$criteria->alias!='')
        
$prefix=$this->_schema->quoteTableName($criteria->alias).'.';
    if(!
is_array($pk)) // single key
        
$pk=array($pk);
    if(
is_array($table->primaryKey) && !isset($pk[0]) && $pk!==array()) // single composite key
        
$pk=array($pk);
    
$condition=$this->createInCondition($table,$table->primaryKey,$pk,$prefix);
    if(
$criteria->condition!='')
        
$criteria->condition=$condition.' AND ('.$criteria->condition.')';
    else
        
$criteria->condition=$condition;

    return 
$criteria;
}

Создает критерии запроса с указанным первичным ключом.

createSearchCondition() метод

public string createSearchCondition(mixed $table, array $columns, mixed $keywords, string $prefix=NULL, boolean $caseSensitive=true)
$table mixed схема таблицы (CDbTableSchema) или имя таблицы (строка).
$columns массив список имён столбцов для потенциального условия поиска.
$keywords mixed ключевые слова для поиска. Это может быть строка с ключевыми словами, разделёнными пробелами, или массив ключевых слов.
$prefix строка необязательный префикс столбца (с точкой в конце). Если null, будет использоваться имя таблицы в качестве префикса.
$caseSensitive логическое значение чувствителен ли поиск к регистру. По умолчанию true.
{return} строка SQL-условие поиска, сопоставляющее набор столбцов. Пустая строка возвращается, если массив столбцов или ключевые слова пустые.
Исходный код: framework/db/schema/CDbCommandBuilder.php#724 (показать)
public function createSearchCondition($table,$columns,$keywords,$prefix=null,$caseSensitive=true)
{
    
$this->ensureTable($table);
    if(!
is_array($keywords))
        
$keywords=preg_split('/\s+/u',$keywords,-1,PREG_SPLIT_NO_EMPTY);
    if(empty(
$keywords))
        return 
'';
    if(
$prefix===null)
        
$prefix=$table->rawName.'.';
    
$conditions=array();
    foreach(
$columns as $name)
    {
        if((
$column=$table->getColumn($name))===null)
            throw new 
CDbException(Yii::t('yii','Table "{table}" does not have a column named "{column}".',
                array(
'{table}'=>$table->name,'{column}'=>$name)));
        
$condition=array();
        foreach(
$keywords as $keyword)
        {
            
$keyword='%'.strtr($keyword,array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%';
            if(
$caseSensitive)
                
$condition[]=$prefix.$column->rawName.' LIKE '.$this->_connection->quoteValue($keyword);
            else
                
$condition[]='LOWER('.$prefix.$column->rawName.') LIKE LOWER('.$this->_connection->quoteValue($keyword).')';
        }
        
$conditions[]=implode(' AND ',$condition);
    }
    return 
'('.implode(' OR ',$conditions).')';
}

Генерирует выражение для поиска указанных ключевых слов в списке столбцов. Выражение поиска генерируется с использованием SQL-синтаксиса 'LIKE'. Каждое слово в ключевых словах должно быть присутствовать и появляться по крайней мере в одном из столбцов.

createSqlCommand() метод

public CDbCommand createSqlCommand(string $sql, array $params=array ( ))
$sql строка явным образом заданное SQL-выражение
$params массив параметры, которые будут привязаны к SQL-выражению
{return} CDbCommand созданная команда
Исходный код: framework/db/schema/CDbCommandBuilder.php#454 (показать)
public function createSqlCommand($sql,$params=array())
{
    
$command=$this->_connection->createCommand($sql);
    
$this->bindValues($command,$params);
    return 
$command;
}

Создаёт команду на основе заданного SQL-выражения.

createUpdateCommand() метод

public CDbCommand createUpdateCommand(mixed $table, array $data, CDbCriteria $criteria)
$table mixed схема таблицы (CDbTableSchema) или имя таблицы (строка).
$data массив список столбцов для обновления (имя=>значение)
$criteria CDbCriteria критерии запроса
{return} CDbCommand команда обновления.
Исходный код: framework/db/schema/CDbCommandBuilder.php#364 (показать)
public function createUpdateCommand($table,$data,$criteria)
{
    
$this->ensureTable($table);
    
$fields=array();
    
$values=array();
    
$bindByPosition=isset($criteria->params[0]);
    
$i=0;
    foreach(
$data as $name=>$value)
    {
        if((
$column=$table->getColumn($name))!==null)
        {
            if(
$value instanceof CDbExpression)
            {
                
$fields[]=$column->rawName.'='.$value->expression;
                foreach(
$value->params as $n=>$v)
                    
$values[$n]=$v;
            }
            elseif(
$bindByPosition)
            {
                
$fields[]=$column->rawName.'=?';
                
$values[]=$column->typecast($value);
            }
            else
            {
                
$fields[]=$column->rawName.'='.self::PARAM_PREFIX.$i;
                
$values[self::PARAM_PREFIX.$i]=$column->typecast($value);
                
$i++;
            }
        }
    }
    if(
$fields===array())
        throw new 
CDbException(Yii::t('yii','No columns are being updated for table "{table}".',
            array(
'{table}'=>$table->name)));
    
$sql="UPDATE {$table->rawName} SET ".implode(', ',$fields);
    
$sql=$this->applyJoin($sql,$criteria->join);
    
$sql=$this->applyCondition($sql,$criteria->condition);
    
$sql=$this->applyOrder($sql,$criteria->order);
    
$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);

    
$command=$this->_connection->createCommand($sql);
    
$this->bindValues($command,array_merge($values,$criteria->params));

    return 
$command;
}

Создаёт команду UPDATE.

createUpdateCounterCommand() метод

public CDbCommand createUpdateCounterCommand(mixed $table, array $counters, CDbCriteria $criteria)
$table mixed схема таблицы (CDbTableSchema) или имя таблицы (строка).
$counters массив счётчики для обновления (приращения/уменьшения счётчиков, индексированные по именам столбцов).
$criteria CDbCriteria критерии запроса
{return} CDbCommand созданная команда
Исходный код: framework/db/schema/CDbCommandBuilder.php#417 (показать)
public function createUpdateCounterCommand($table,$counters,$criteria)
{
    
$this->ensureTable($table);
    
$fields=array();
    foreach(
$counters as $name=>$value)
    {
        if((
$column=$table->getColumn($name))!==null)
        {
            
$value=(float)$value;
            if(
$value<0)
                
$fields[]="{$column->rawName}={$column->rawName}-".(-$value);
            else
                
$fields[]="{$column->rawName}={$column->rawName}+".$value;
        }
    }
    if(
$fields!==array())
    {
        
$sql="UPDATE {$table->rawName} SET ".implode(', ',$fields);
        
$sql=$this->applyJoin($sql,$criteria->join);
        
$sql=$this->applyCondition($sql,$criteria->condition);
        
$sql=$this->applyOrder($sql,$criteria->order);
        
$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);
        
$command=$this->_connection->createCommand($sql);
        
$this->bindValues($command,$criteria->params);
        return 
$command;
    }
    else
        throw new 
CDbException(Yii::t('yii','No counter columns are being updated for table "{table}".',
            array(
'{table}'=>$table->name)));
}

Создаёт команду UPDATE, которая увеличивает/уменьшает определённые столбцы.

ensureTable() метод

protected void ensureTable(mixed &$table)
$table mixed схема таблицы (CDbTableSchema) или имя таблицы (строка). Если это относится к валидному имени таблицы, этот параметр будет возвращён со соответствующей схемой таблицы.
Исходный код: framework/db/schema/CDbCommandBuilder.php#859 (показать)
protected function ensureTable(&$table)
{
    if(
is_string($table) && ($table=$this->_schema->getTable($tableName=$table))===null)
        throw new 
CDbException(Yii::t('yii','Table "{table}" does not exist.',
            array(
'{table}'=>$tableName)));
}

Проверяет, является ли параметр валидной схемой таблицы. Если это строка, соответствующая схема таблицы будет извлечена.

getDbConnection() метод

public CDbConnection getDbConnection()
{return} CDbConnection соединение с базой данных.
Исходный код: framework/db/schema/CDbCommandBuilder.php#40 (показать)
public function getDbConnection()
{
    return 
$this->_connection;
}

getIntegerPrimaryKeyDefaultValue() метод (доступен с версии v1.1.14)

protected string getIntegerPrimaryKeyDefaultValue()
{return} строка значение по умолчанию для первичного ключа целого типа/последовательности.
Исходный код: framework/db/schema/CDbCommandBuilder.php#872 (показать)
protected function getIntegerPrimaryKeyDefaultValue()
{
    return 
'NULL';
}

Возвращает значение по умолчанию для первичного ключа целого типа/последовательности. Значение по умолчанию означает, что будет использовано следующее значение автоинкремента/последовательности.

getLastInsertID() метод

public mixed getLastInsertID(mixed $table)
$table mixed схема таблицы (CDbTableSchema) или имя таблицы (строка).
{return} mixed последний ID вставки. Возвращает Null, если нет имени последовательности.
Исходный код: framework/db/schema/CDbCommandBuilder.php#58 (показать)
public function getLastInsertID($table)
{
    
$this->ensureTable($table);
    if(
$table->sequenceName!==null)
        return 
$this->_connection->getLastInsertID($table->sequenceName);
    else
        return 
null;
}

Возвращает последний ID вставки для указанной таблицы.

getSchema() метод

public CDbSchema getSchema()
{return} CDbSchema схема для этого билдера команд.
Исходный код: framework/db/schema/CDbCommandBuilder.php#48 (показать)
public function getSchema()
{
    return 
$this->_schema;
}

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbCommandBuilder

Spec-Zone.ru

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