CDbCommandBuilder
包 | system.db.schema |
---|---|
继承 | class CDbCommandBuilder » CComponent |
子类 | CMssqlCommandBuilder, COciCommandBuilder, CSqliteCommandBuilder |
源自 | 1.0 |
版本 | $Id: CDbCommandBuilder.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/db/schema/CDbCommandBuilder.php |
公共属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
dbConnection | CDbConnection | database connection. | CDbCommandBuilder |
schema | CDbSchema | the schema for this command builder. | CDbCommandBuilder |
公共方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__construct() | CDbCommandBuilder | |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__unset() | 设置一个组件的属性为null。 | CComponent |
applyCondition() | Alters the SQL to apply WHERE clause. | CDbCommandBuilder |
applyGroup() | Alters the SQL to apply GROUP BY. | CDbCommandBuilder |
applyHaving() | Alters the SQL to apply HAVING. | CDbCommandBuilder |
applyJoin() | Alters the SQL to apply JOIN clause. | CDbCommandBuilder |
applyLimit() | Alters the SQL to apply LIMIT and OFFSET. | CDbCommandBuilder |
applyOrder() | Alters the SQL to apply ORDER BY. | CDbCommandBuilder |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
bindValues() | Binds parameter values for an SQL command. | CDbCommandBuilder |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
createColumnCriteria() | Creates a query criteria with the specified column values. | CDbCommandBuilder |
createCountCommand() | Creates a COUNT(*) command for a single table. | CDbCommandBuilder |
createCriteria() | Creates a query criteria. | CDbCommandBuilder |
createDeleteCommand() | Creates a DELETE command. | CDbCommandBuilder |
createFindCommand() | Creates a SELECT command for a single table. | CDbCommandBuilder |
createInCondition() | Generates the expression for selecting rows of specified primary key values. | CDbCommandBuilder |
createInsertCommand() | Creates an INSERT command. | CDbCommandBuilder |
createPkCondition() | Generates the expression for selecting rows of specified primary key values. | CDbCommandBuilder |
createPkCriteria() | Creates a query criteria with the specified primary key. | CDbCommandBuilder |
createSearchCondition() | Generates the expression for searching the specified keywords within a list of columns. | CDbCommandBuilder |
createSqlCommand() | Creates a command based on a given SQL statement. | CDbCommandBuilder |
createUpdateCommand() | Creates an UPDATE command. | CDbCommandBuilder |
createUpdateCounterCommand() | Creates an UPDATE command that increments/decrements certain columns. | CDbCommandBuilder |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaluateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getDbConnection() | 返回database connection. | CDbCommandBuilder |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
getLastInsertID() | Returns the last insertion ID for the specified table. | CDbCommandBuilder |
getSchema() | 返回the schema for this command builder. | CDbCommandBuilder |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
raiseEvent() | 发起一个事件。 | CComponent |
受保护方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
createCompositeInCondition() | Generates the expression for selecting rows with specified composite key values. | CDbCommandBuilder |
ensureTable() | Checks if the parameter is a valid table schema. | CDbCommandBuilder |
属性详细
dbConnection 属性 只读 public CDbConnection getDbConnection()database connection.
schema 属性 只读 public CDbSchema getSchema()the schema for this command builder.
方法详细
__construct() 方法public void __construct(CDbSchema $schema) | ||
$schema | CDbSchema | the schema for this command builder |
publicfunction__construct($schema)
{
$this->_schema=$schema;
$this->_connection=$schema->getDbConnection();
}
applyCondition() 方法public string applyCondition(string $sql, string $condition) | ||
$sql | string | the SQL statement without WHERE clause |
$condition | string | the WHERE clause (without WHERE keyword) |
{return} | string | the altered SQL statement |
publicfunctionapplyCondition($sql,$condition)
{
if($condition!='')
return$sql.'WHERE'.$condition;
else
return$sql;
}
Alters the SQL to apply WHERE clause.
applyGroup() 方法public string applyGroup(string $sql, string $group) | ||
$sql | string | SQL query string without GROUP BY. |
$group | string | GROUP BY |
{return} | string | SQL with GROUP BY. |
publicfunctionapplyGroup($sql,$group)
{
if($group!='')
return$sql.'GROUPBY'.$group;
else
return$sql;
}
Alters the SQL to apply GROUP BY.
applyHaving() 方法public string applyHaving(string $sql, string $having) | ||
$sql | string | SQL query string without HAVING |
$having | string | HAVING |
{return} | string | SQL with HAVING |
publicfunctionapplyHaving($sql,$having)
{
if($having!='')
return$sql.'HAVING'.$having;
else
return$sql;
}
Alters the SQL to apply HAVING.
applyJoin() 方法public string applyJoin(string $sql, string $join) | ||
$sql | string | the SQL statement to be altered |
$join | string | the JOIN clause (starting with join type, such as INNER JOIN) |
{return} | string | the altered SQL statement |
publicfunctionapplyJoin($sql,$join)
{
if($join!='')
return$sql.''.$join;
else
return$sql;
}
Alters the SQL to apply JOIN clause.
applyLimit() 方法public string applyLimit(string $sql, integer $limit, integer $offset) | ||
$sql | string | SQL query string without LIMIT and OFFSET. |
$limit | integer | maximum number of rows, -1 to ignore limit. |
$offset | integer | row offset, -1 to ignore offset. |
{return} | string | SQL with LIMIT and OFFSET |
publicfunctionapplyLimit($sql,$limit,$offset)
{
if($limit>=0)
$sql.='LIMIT'.(int)$limit;
if($offset>0)
$sql.='OFFSET'.(int)$offset;
return$sql;
}
Alters the SQL to apply LIMIT and OFFSET. Default implementation is applicable for PostgreSQL, MySQL and SQLite.
applyOrder() 方法public string applyOrder(string $sql, string $orderBy) | ||
$sql | string | SQL statement without ORDER BY. |
$orderBy | string | column ordering |
{return} | string | modified SQL applied with ORDER BY. |
publicfunctionapplyOrder($sql,$orderBy)
{
if($orderBy!='')
return$sql.'ORDERBY'.$orderBy;
else
return$sql;
}
Alters the SQL to apply ORDER BY.
bindValues() 方法public void bindValues(CDbCommand $command, array $values) | ||
$command | CDbCommand | database command |
$values | array | values for binding (integer-indexed array for question mark placeholders, string-indexed array for named placeholders) |
publicfunctionbindValues($command,$values)
{
if(($n=count($values))===0)
return;
if(isset($values[0]))//questionmarkplaceholders
{
for($i=0;$i<$n;++$i)
$command->bindValue($i+1,$values[$i]);
}
else//namedplaceholders
{
foreach($valuesas$name=>$value)
{
if($name[0]!==':')
$name=':'.$name;
$command->bindValue($name,$value);
}
}
}
Binds parameter values for an SQL command.
createColumnCriteria() 方法public CDbCriteria createColumnCriteria(mixed $table, array $columns, mixed $condition='', array $params=array ( ), string $prefix=NULL) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$columns | array | column values that should be matched in the query (name=>value) |
$condition | mixed | query condition or criteria. If a string, it is treated as query condition; If an array, it is treated as the initial values for constructing a CDbCriteria; Otherwise, it should be an instance of CDbCriteria. |
$params | array | parameters to be bound to an SQL statement. This is only used when the third parameter is a string (query condition). In other cases, please use CDbCriteria::params to set parameters. |
$prefix | string | column prefix (ended with dot). If null, it will be the table name |
{return} | CDbCriteria | the created query criteria |
publicfunctioncreateColumnCriteria($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($columnsas$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.'ISNULL';
}
else
thrownewCDbException(Yii::t('yii','Table"{table}"doesnothaveacolumnnamed"{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;
}
Creates a query criteria with the specified column values.
createCompositeInCondition() 方法protected string createCompositeInCondition(CDbTableSchema $table, array $values, string $prefix) | ||
$table | CDbTableSchema | the table schema |
$values | array | list of primary key values to be selected within |
$prefix | string | column prefix (ended with dot) |
{return} | string | the expression for selection |
protectedfunctioncreateCompositeInCondition($table,$values,$prefix)
{
$keyNames=array();
foreach(array_keys($values[0])as$name)
$keyNames[]=$prefix.$table->columns[$name]->rawName;
$vs=array();
foreach($valuesas$value)
$vs[]='('.implode(',',$value).')';
return'('.implode(',',$keyNames).')IN('.implode(',',$vs).')';
}
Generates the expression for selecting rows with specified composite key values.
createCountCommand() 方法public CDbCommand createCountCommand(mixed $table, CDbCriteria $criteria, string $alias='t') | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$criteria | CDbCriteria | the query criteria |
$alias | string | the alias name of the primary table. Defaults to 't'. |
{return} | CDbCommand | query command. |
publicfunctioncreateCountCommand($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?'SELECTDISTINCT':'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="SELECTCOUNT(*)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->primaryKeyas$key)
$pk[]=$alias.'.'.$key;
$pk=implode(',',$pk);
}
else
$pk=$alias.'.'.$table->primaryKey;
$sql="SELECTCOUNT(DISTINCT$pk)";
}
else
$sql="SELECTCOUNT(*)";
$sql.="FROM{$table->rawName}$alias";
$sql=$this->applyJoin($sql,$criteria->join);
$sql=$this->applyCondition($sql,$criteria->condition);
}
$command=$this->_connection->createCommand($sql);
$this->bindValues($command,$criteria->params);
return$command;
}
Creates a COUNT(*) command for a single table.
createCriteria() 方法public CDbCriteria createCriteria(mixed $condition='', array $params=array ( )) | ||
$condition | mixed | query condition or criteria. If a string, it is treated as query condition (the WHERE clause); If an array, it is treated as the initial values for constructing a CDbCriteria object; Otherwise, it should be an instance of CDbCriteria. |
$params | array | parameters to be bound to an SQL statement. This is only used when the first parameter is a string (query condition). In other cases, please use CDbCriteria::params to set parameters. |
{return} | CDbCriteria | the created query criteria |
publicfunctioncreateCriteria($condition='',$params=array())
{
if(is_array($condition))
$criteria=newCDbCriteria($condition);
elseif($conditioninstanceofCDbCriteria)
$criteria=clone$condition;
else
{
$criteria=newCDbCriteria;
$criteria->condition=$condition;
$criteria->params=$params;
}
return$criteria;
}
Creates a query criteria.
createDeleteCommand() 方法public CDbCommand createDeleteCommand(mixed $table, CDbCriteria $criteria) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$criteria | CDbCriteria | the query criteria |
{return} | CDbCommand | delete command. |
publicfunctioncreateDeleteCommand($table,$criteria)
{
$this->ensureTable($table);
$sql="DELETEFROM{$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;
}
Creates a DELETE command.
createFindCommand() 方法public CDbCommand createFindCommand(mixed $table, CDbCriteria $criteria, string $alias='t') | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$criteria | CDbCriteria | the query criteria |
$alias | string | the alias name of the primary table. Defaults to 't'. |
{return} | CDbCommand | query command. |
publicfunctioncreateFindCommand($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);
//issue1432:needtoexpand*whenSQLhasJOIN
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?'SELECTDISTINCT':'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;
}
Creates a SELECT command for a single table.
createInCondition() 方法public string createInCondition(mixed $table, mixed $columnName, array $values, string $prefix=NULL) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$columnName | mixed | the column name(s). It can be either a string indicating a single column or an array of column names. If the latter, it stands for a composite key. |
$values | array | list of key values to be selected within |
$prefix | string | column prefix (ended with dot). If null, it will be the table name |
{return} | string | the expression for selection |
publicfunctioncreateInCondition($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))//simplekey
{
if(!isset($table->columns[$columnName]))
thrownewCDbException(Yii::t('yii','Table"{table}"doesnothaveacolumnnamed"{column}".',
array('{table}'=>$table->name,'{column}'=>$columnName)));
$column=$table->columns[$columnName];
foreach($valuesas&$value)
{
$value=$column->typecast($value);
if(is_string($value))
$value=$db->quoteValue($value);
}
if($n===1)
return$prefix.$column->rawName.($values[0]===null?'ISNULL':'='.$values[0]);
else
return$prefix.$column->rawName.'IN('.implode(',',$values).')';
}
elseif(is_array($columnName))//compositekey:$values=array(array('pk1'=>'v1','pk2'=>'v2'),array(...))
{
foreach($columnNameas$name)
{
if(!isset($table->columns[$name]))
thrownewCDbException(Yii::t('yii','Table"{table}"doesnothaveacolumnnamed"{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
thrownewCDbException(Yii::t('yii','Thevalueforthecolumn"{column}"isnotsuppliedwhenqueryingthetable"{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?'ISNULL':'='.$value);
returnimplode('AND',$entries);
}
return$this->createCompositeInCondition($table,$values,$prefix);
}
else
thrownewCDbException(Yii::t('yii','Columnnamemustbeeitherastringoranarray.'));
}
Generates the expression for selecting rows of specified primary key values.
createInsertCommand() 方法public CDbCommand createInsertCommand(mixed $table, array $data) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$data | array | data to be inserted (column name=>column value). If a key is not a valid column name, the corresponding value will be ignored. |
{return} | CDbCommand | insert command |
publicfunctioncreateInsertCommand($table,$data)
{
$this->ensureTable($table);
$fields=array();
$values=array();
$placeholders=array();
$i=0;
foreach($dataas$name=>$value)
{
if(($column=$table->getColumn($name))!==null&&($value!==null||$column->allowNull))
{
$fields[]=$column->rawName;
if($valueinstanceofCDbExpression)
{
$placeholders[]=$value->expression;
foreach($value->paramsas$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($pksas$pk)
{
$fields[]=$table->getColumn($pk)->rawName;
$placeholders[]='NULL';
}
}
$sql="INSERTINTO{$table->rawName}(".implode(',',$fields).')VALUES('.implode(',',$placeholders).')';
$command=$this->_connection->createCommand($sql);
foreach($valuesas$name=>$value)
$command->bindValue($name,$value);
return$command;
}
Creates an INSERT command.
createPkCondition() 方法public string createPkCondition(mixed $table, array $values, string $prefix=NULL) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$values | array | list of primary key values to be selected within |
$prefix | string | column prefix (ended with dot). If null, it will be the table name |
{return} | string | the expression for selection |
publicfunctioncreatePkCondition($table,$values,$prefix=null)
{
$this->ensureTable($table);
return$this->createInCondition($table,$table->primaryKey,$values,$prefix);
}
Generates the expression for selecting rows of specified primary key values.
createPkCriteria() 方法public CDbCriteria createPkCriteria(mixed $table, mixed $pk, mixed $condition='', array $params=array ( ), string $prefix=NULL) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$pk | mixed | primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value). |
$condition | mixed | query condition or criteria. If a string, it is treated as query condition; If an array, it is treated as the initial values for constructing a CDbCriteria; Otherwise, it should be an instance of CDbCriteria. |
$params | array | parameters to be bound to an SQL statement. This is only used when the second parameter is a string (query condition). In other cases, please use CDbCriteria::params to set parameters. |
$prefix | string | column prefix (ended with dot). If null, it will be the table name |
{return} | CDbCriteria | the created query criteria |
publicfunctioncreatePkCriteria($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))//singlekey
$pk=array($pk);
if(is_array($table->primaryKey)&&!isset($pk[0])&&$pk!==array())//singlecompositekey
$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;
}
Creates a query criteria with the specified primary key.
createSearchCondition() 方法public string createSearchCondition(mixed $table, array $columns, mixed $keywords, string $prefix=NULL, boolean $caseSensitive=true) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$columns | array | list of column names for potential search condition. |
$keywords | mixed | search keywords. This can be either a string with space-separated keywords or an array of keywords. |
$prefix | string | optional column prefix (with dot at the end). If null, the table name will be used as the prefix. |
$caseSensitive | boolean | whether the search is case-sensitive. Defaults to true. |
{return} | string | SQL search condition matching on a set of columns. An empty string is returned if either the column array or the keywords are empty. |
publicfunctioncreateSearchCondition($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($columnsas$name)
{
if(($column=$table->getColumn($name))===null)
thrownewCDbException(Yii::t('yii','Table"{table}"doesnothaveacolumnnamed"{column}".',
array('{table}'=>$table->name,'{column}'=>$name)));
$condition=array();
foreach($keywordsas$keyword)
{
$keyword='%'.strtr($keyword,array('%'=>'%','_'=>'_')).'%';
if($caseSensitive)
$condition[]=$prefix.$column->rawName.'LIKE'.$this->_connection->quoteValue('%'.$keyword.'%');
else
$condition[]='LOWER('.$prefix.$column->rawName.')LIKELOWER('.$this->_connection->quoteValue('%'.$keyword.'%').')';
}
$conditions[]=implode('AND',$condition);
}
return'('.implode('OR',$conditions).')';
}
Generates the expression for searching the specified keywords within a list of columns. The search expression is generated using the 'LIKE' SQL syntax. Every word in the keywords must be present and appear in at least one of the columns.
createSqlCommand() 方法public CDbCommand createSqlCommand(string $sql, array $params=array ( )) | ||
$sql | string | the explicitly specified SQL statement |
$params | array | parameters that will be bound to the SQL statement |
{return} | CDbCommand | the created command |
publicfunctioncreateSqlCommand($sql,$params=array())
{
$command=$this->_connection->createCommand($sql);
$this->bindValues($command,$params);
return$command;
}
Creates a command based on a given SQL statement.
createUpdateCommand() 方法public CDbCommand createUpdateCommand(mixed $table, array $data, CDbCriteria $criteria) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$data | array | list of columns to be updated (name=>value) |
$criteria | CDbCriteria | the query criteria |
{return} | CDbCommand | update command. |
publicfunctioncreateUpdateCommand($table,$data,$criteria)
{
$this->ensureTable($table);
$fields=array();
$values=array();
$bindByPosition=isset($criteria->params[0]);
$i=0;
foreach($dataas$name=>$value)
{
if(($column=$table->getColumn($name))!==null)
{
if($valueinstanceofCDbExpression)
{
$fields[]=$column->rawName.'='.$value->expression;
foreach($value->paramsas$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())
thrownewCDbException(Yii::t('yii','Nocolumnsarebeingupdatedfortable"{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;
}
Creates an UPDATE command.
createUpdateCounterCommand() 方法public CDbCommand createUpdateCounterCommand(mixed $table, array $counters, CDbCriteria $criteria) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
$counters | array | counters to be updated (counter increments/decrements indexed by column names.) |
$criteria | CDbCriteria | the query criteria |
{return} | CDbCommand | the created command |
publicfunctioncreateUpdateCounterCommand($table,$counters,$criteria)
{
$this->ensureTable($table);
$fields=array();
foreach($countersas$name=>$value)
{
if(($column=$table->getColumn($name))!==null)
{
$value=(int)$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
thrownewCDbException(Yii::t('yii','Nocountercolumnsarebeingupdatedfortable"{table}".',
array('{table}'=>$table->name)));
}
Creates an UPDATE command that increments/decrements certain columns.
ensureTable() 方法protected void ensureTable(mixed &$table) | ||
$table | mixed | table schema (CDbTableSchema) or table name (string). If this refers to a valid table name, this parameter will be returned with the corresponding table schema. |
protectedfunctionensureTable(&$table)
{
if(is_string($table)&&($table=$this->_schema->getTable($tableName=$table))===null)
thrownewCDbException(Yii::t('yii','Table"{table}"doesnotexist.',
array('{table}'=>$tableName)));
}
Checks if the parameter is a valid table schema. If it is a string, the corresponding table schema will be retrieved.
getDbConnection() 方法public CDbConnection getDbConnection() | ||
{return} | CDbConnection | database connection. |
publicfunctiongetDbConnection()
{
return$this->_connection;
}
getLastInsertID() 方法public mixed getLastInsertID(mixed $table) | ||
$table | mixed | the table schema (CDbTableSchema) or the table name (string). |
{return} | mixed | last insertion id. Null is returned if no sequence name. |
publicfunctiongetLastInsertID($table)
{
$this->ensureTable($table);
if($table->sequenceName!==null)
return$this->_connection->getLastInsertID($table->sequenceName);
else
returnnull;
}
Returns the last insertion ID for the specified table.
getSchema() 方法public CDbSchema getSchema() | ||
{return} | CDbSchema | the schema for this command builder. |
publicfunctiongetSchema()
{
return$this->_schema;
}