Возвращает значение по умолчанию для целочисленного/последовательного первичного ключа. Значение по умолчанию означает, что будет использовано следующее значение автоинкремента/последовательности.
значения для привязки (массив с целочисленными индексами для подстановки вопросительных знаков, массив с строковыми индексами для именованных подстановок)
схема таблицы (CDbTableSchema) или имя таблицы (строка).
$data
массив
список данных для вставки, каждое значение должно быть массивом в формате (имя столбца=>значение столбца). Если ключ не является допустимым именем столбца, соответствующее значение будет проигнорировано.
foreach($params as $name=>$value) $command->bindValue($name,$value);
return $command; }
Создаёт команду множественной вставки. Этот метод формирует SQL-выражение с помощью заданных шаблонов частей, предоставляя возможность адаптировать команду для разных синтаксисов SQL.
схема таблицы (CDbTableSchema) или имя таблицы (строка).
$columns
массив
значения столбцов, которые должны быть сопоставлены в запросе (имя=>значение)
$condition
смешанный тип
условие запроса или критерии. Если строка, она обрабатывается как условие запроса; Если массив, она обрабатывается как начальные значения для построения CDbCriteria; В противном случае это должен быть экземпляр CDbCriteria.
$params
массив
параметры, которые необходимо привязать к SQL-запросу. Это используется только когда третий параметр является строкой (условие запроса). В других случаях используйте CDbCriteria::params для задания параметров.
$prefix
строка
префикс столбца (заканчивается точкой). Если null, будет использовано имя таблицы
public function createCountCommand($table,$criteria,$alias='t') { $this->ensureTable($table); if($criteria->alias!='') $alias=$criteria->alias; $alias=$this->_schema->quoteTableName($alias);
// 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]); }
public CDbCriteriacreateCriteria(mixed $condition='', array $params=array ( ))
$condition
смешанный тип
условие запроса или критерии. Если строка, обрабатывается как условие запроса (оператор WHERE); если массив, обрабатывается как начальные значения для создания объекта CDbCriteria; в противном случае, должен быть экземпляром CDbCriteria.
$params
массив
параметры, которые будут связаны с SQL-запросом. Используется только когда первый параметр является строкой (условие запроса). В других случаях, пожалуйста, используйте CDbCriteria::params для установки параметров.
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); }
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 CDbCommandcreateInsertCommand(mixed $table, array $data)
$table
смешанный тип
схема таблицы (CDbTableSchema) или имя таблицы (строка).
$data
массив
данные для вставки (имя столбца=>значение столбца). Если ключ не является допустимым именем столбца, соответствующее значение будет проигнорировано.
foreach($values as $name=>$value) $command->bindValue($name,$value);
return $command; }
Создает команду INSERT.
createMultipleInsertCommand() метод (доступен начиная с v1.1.14)
public CDbCommandcreateMultipleInsertCommand(mixed $table, array $data)
$table
смешанный тип
схема таблицы (CDbTableSchema) или имя таблицы (строка).
$data
массив
список данных для вставки, каждое значение должно быть массивом в формате (имя столбца=>значение столбца). Если ключ не является допустимым именем столбца, соответствующее значение будет проигнорировано.
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, будет именем таблицы
public function createPkCondition($table,$values,$prefix=null) { $this->ensureTable($table); return $this->createInCondition($table,$table->primaryKey,$values,$prefix); }
Генерирует выражение для выбора строк со значениями первичного ключа.
схема таблицы (CDbTableSchema) или имя таблицы (строка).
$pk
mixed
значение первичного ключа(ей). Используйте массив для нескольких первичных ключей. Для составного ключа каждое значение ключа должно быть массивом (имя столбца=>значение столбца).
$condition
mixed
условие запроса или критерии. Если строка, она обрабатывается как условие запроса; если массив, он обрабатывается как начальные значения для построения CDbCriteria; в противном случае это должен быть экземпляр CDbCriteria.
$params
массив
параметры, которые должны быть привязаны к SQL-запросу. Это используется только тогда, когда второй параметр является строкой (условие запроса). В других случаях, пожалуйста, используйте CDbCriteria::params для установки параметров.
$prefix
строка
префикс столбца (заканчивается точкой). Если null, он будет именем таблицы.
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 CDbCommandcreateSqlCommand(string $sql, array $params=array ( ))
$sql
строка
явным образом заданное SQL-выражение
$params
массив
параметры, которые будут привязаны к SQL-выражению
public function createSqlCommand($sql,$params=array()) { $command=$this->_connection->createCommand($sql); $this->bindValues($command,$params); return $command; }
Создаёт команду на основе заданного SQL-выражения.
createUpdateCommand() метод
public CDbCommandcreateUpdateCommand(mixed $table, array $data, CDbCriteria $criteria)
$table
mixed
схема таблицы (CDbTableSchema) или имя таблицы (строка).
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) или имя таблицы (строка). Если это относится к валидному имени таблицы, этот параметр будет возвращён со соответствующей схемой таблицы.
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))); }
Проверяет, является ли параметр валидной схемой таблицы. Если это строка, соответствующая схема таблицы будет извлечена.
protected function getIntegerPrimaryKeyDefaultValue() { return 'NULL'; }
Возвращает значение по умолчанию для первичного ключа целого типа/последовательности. Значение по умолчанию означает, что будет использовано следующее значение автоинкремента/последовательности.
getLastInsertID() метод
public mixed getLastInsertID(mixed $table)
$table
mixed
схема таблицы (CDbTableSchema) или имя таблицы (строка).
{return}
mixed
последний ID вставки. Возвращает Null, если нет имени последовательности.