Yii Framework v1.1.10 绫诲弬鑰

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
CDbCommandBuilder provides basic methods to create query commands for tables.

鍏叡灞炴

闅愯棌缁ф壙灞炴

灞炴绫诲瀷鎻忚堪瀹氫箟鍦
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() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 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 灞炴 鍙

database connection.

schema 灞炴 鍙

the schema for this command builder.

鏂规硶璇︾粏

__construct() 鏂规硶
public void __construct(CDbSchema $schema)
$schema CDbSchema the schema for this command builder
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#32 (鏄剧ず)
public function __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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#355 (鏄剧ず)
public function applyCondition($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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#400 (鏄剧ず)
public function applyGroup($sql,$group)
{
    if(
$group!='')
        return 
$sql.' GROUP BY '.$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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#414 (鏄剧ず)
public function applyHaving($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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#341 (鏄剧ず)
public function applyJoin($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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#385 (鏄剧ず)
public function applyLimit($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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#369 (鏄剧ず)
public function applyOrder($sql,$orderBy)
{
    if(
$orderBy!='')
        return 
$sql.' ORDER BY '.$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)
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#427 (鏄剧ず)
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);
        }
    }
}

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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#534 (鏄剧ず)
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);
            else if(
$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;
}

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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#711 (鏄剧ず)
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).')';
}

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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#112 (鏄剧ず)
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;
        else if(
$criteria->distinct)
        {
            if(
is_array($table->primaryKey))
            {
                
$pk=array();
                foreach(
$table->primaryKey as $key)
                    
$pk[]=$alias.'.'.$key;
                
$pk=implode(', ',$pk);
            }
            else
                
$pk=$alias.'.'.$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);
    }

    
$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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#459 (鏄剧ず)
public function createCriteria($condition='',$params=array())
{
    if(
is_array($condition))
        
$criteria=new CDbCriteria($condition);
    else if(
$condition instanceof CDbCriteria)
        
$criteria=clone $condition;
    else
    {
        
$criteria=new CDbCriteria;
        
$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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#166 (鏄剧ず)
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;
}

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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#75 (鏄剧ず)
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;
}

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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#634 (鏄剧ず)
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];

        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).')';
    }
    else if(
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.'));
}

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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#187 (鏄剧ず)
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[]='NULL';
        }
    }
    
$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;
}

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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#514 (鏄剧ず)
public function createPkCondition($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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#488 (鏄剧ず)
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;
}

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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#596 (鏄剧ず)
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).')';
}

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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#328 (鏄剧ず)
public function createSqlCommand($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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#238 (鏄剧ず)
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;
            }
            else if(
$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;
}

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
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#291 (鏄剧ず)
public function createUpdateCounterCommand($table,$counters,$criteria)
{
    
$this->ensureTable($table);
    
$fields=array();
    foreach(
$counters as $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
        throw new 
CDbException(Yii::t('yii','No counter columns are being updated for table "{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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#729 (鏄剧ず)
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)));
}

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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#41 (鏄剧ず)
public function getDbConnection()
{
    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.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#59 (鏄剧ず)
public function getLastInsertID($table)
{
    
$this->ensureTable($table);
    if(
$table->sequenceName!==null)
        return 
$this->_connection->getLastInsertID($table->sequenceName);
    else
        return 
null;
}

Returns the last insertion ID for the specified table.

getSchema() 鏂规硶
public CDbSchema getSchema()
{return} CDbSchema the schema for this command builder.
婧愮爜锛 framework/db/schema/CDbCommandBuilder.php#49 (鏄剧ず)
public function getSchema()
{
    return 
$this->_schema;
}

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.