COciCommandBuilder


system.db.schema.oci
继承 class COciCommandBuilder » CDbCommandBuilder » CComponent
版本 $Id: COciCommandBuilder.php 3515 2011-12-28 12:29:24Z mdomba $
源码
COciCommandBuilder提供为数据表创建查询语句的基本方法。

公共属性

属性 类型 描述 定义在
dbConnection CDbConnection database connection. CDbCommandBuilder
returnID integer 最后一次插入ID。 COciCommandBuilder
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() 改变SQL语句以应用LIMIT和OFFSET。 COciCommandBuilder
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() 创建INSERT命令。 COciCommandBuilder
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() 返回指定表的最后一次插入ID。 COciCommandBuilder
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

属性详细

returnID 属性
public integer $returnID;

最后一次插入ID。

方法详细

applyLimit() 方法
public string applyLimit(string $sql, integer $limit, integer $offset)
$sql string 没有LIMIT和OFFSET的SQL查询字符串。
$limit integer 最大行数,若为-1则忽略limit。
$offset integer 行位移,若为-1则忽略offset。
{return} string 带有LIMIT和OFFSET的SQL。
public function applyLimit($sql,$limit,$offset)
{
    if ((
$limit 0) and ($offset 0)) return $sql;

    
$filters = array();
    if(
$offset>0){
        
$filters[] = 'rowNumId > '.(int)$offset;
    }

    if(
$limit>=0){
        
$filters[]= 'rownum <= '.(int)$limit;
    }

    if (
count($filters) > 0){
        
$filter implode(' and '$filters);
        
$filter" WHERE ".$filter;
    }else{
        
$filter '';
    }


    
$sql = <<<EOD
            WITH USER_SQL AS ({$sql}),
               PAGINATION AS (SELECT USER_SQL.*, rownum as rowNumId FROM USER_SQL)
            SELECT *
            FROM PAGINATION
            
{$filter}
EOD;

    return 
$sql;
}

改变SQL语句以应用LIMIT和OFFSET。 默认实现适用于PostgreSQL、MySQL和SQLite。

createInsertCommand() 方法
public CDbCommand createInsertCommand(mixed $table, array $data)
$table mixed 表结构(CDbTableSchema)或者表名(字符串)。
$data array 要插入的数据(列名=>列值)。若某键不是一个有效的列名,则相应的值会被忽略。
{return} CDbCommand insert命令
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++;
            }
        }
    }

    
$sql="INSERT INTO {$table->rawName} (".implode(', ',$fields).') VALUES ('.implode(', ',$placeholders).')';

    if(
is_string($table->primaryKey) && ($column=$table->getColumn($table->primaryKey))!==null && $column->type!=='string')
    {
        
$sql.=' RETURNING '.$column->rawName.' INTO :RETURN_ID';
        
$command=$this->getDbConnection()->createCommand($sql);
        
$command->bindParam(':RETURN_ID'$this->returnIDPDO::PARAM_INT12);
        
$table->sequenceName='RETURN_ID';
    }
    else
        
$command=$this->getDbConnection()->createCommand($sql);

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

    return 
$command;
}

创建INSERT命令。

getLastInsertID() 方法
public mixed getLastInsertID(mixed $table)
$table mixed 表结构(CDbTableSchema)或者表名(字符串)。
{return} mixed 最后一次插入ID。若没有序列名,则返回null。
public function getLastInsertID($table)
{
    return 
$this->returnID;
}

返回指定表的最后一次插入ID。