0 追蹤者

類別 yii\db\cubrid\QueryBuilder

繼承yii\db\cubrid\QueryBuilder » yii\db\QueryBuilder » yii\base\BaseObject
實作yii\base\Configurable
自版本起可用2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/db/cubrid/QueryBuilder.php

QueryBuilder 是用於 CUBRID 資料庫(版本 9.3.x 及更高版本)的查詢建構器。

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$conditionBuilders array 查詢條件到建構器方法的對應。 yii\db\QueryBuilder
$conditionClasses array 條件別名到條件類別的對應。 yii\db\QueryBuilder
$db yii\db\Connection 資料庫連線。 yii\db\QueryBuilder
$expressionBuilders string[]|yii\db\ExpressionBuilderInterface[] 表達式類別到表達式建構器類別的對應。 yii\db\QueryBuilder
$separator string SQL 陳述式不同片段之間的分隔符。 yii\db\QueryBuilder
$typeMap array 從抽象欄位類型(鍵)到實體欄位類型(值)的對應。 yii\db\cubrid\QueryBuilder

受保護的屬性

隱藏繼承的屬性

屬性 類型 描述 定義於

公開方法

隱藏繼承的方法

方法 描述 定義於
__call() 呼叫未定義為類別方法的指定名稱方法。 yii\base\BaseObject
__construct() 建構子。 yii\db\QueryBuilder
__get() 傳回物件屬性的值。 yii\base\BaseObject
__isset() 檢查屬性是否已設定,即已定義且非 null。 yii\base\BaseObject
__set() 設定物件屬性的值。 yii\base\BaseObject
__unset() 將物件屬性設定為 null。 yii\base\BaseObject
addCheck() 建立 SQL 命令,用於將檢查約束新增至現有表格。 yii\db\cubrid\QueryBuilder
addColumn() 建立 SQL 陳述式,用於新增新的資料庫欄位。 yii\db\QueryBuilder
addCommentOnColumn() 建立 SQL 命令,用於新增欄位註解。 yii\db\cubrid\QueryBuilder
addCommentOnTable() 建立 SQL 命令,用於新增表格註解。 yii\db\cubrid\QueryBuilder
addDefaultValue() 建立 SQL 命令,用於將預設值約束新增至現有表格。 yii\db\QueryBuilder
addForeignKey() 建立 SQL 陳述式,用於將外鍵約束新增至現有表格。 yii\db\QueryBuilder
addPrimaryKey() 建立 SQL 陳述式,用於將主鍵約束新增至現有表格。 yii\db\QueryBuilder
addUnique() 建立 SQL 命令,用於將唯一約束新增至現有表格。 yii\db\QueryBuilder
alterColumn() 建立 SQL 陳述式,用於變更欄位的定義。 yii\db\QueryBuilder
batchInsert() 產生批次 INSERT SQL 陳述式。 yii\db\QueryBuilder
bindParam() 輔助方法,使用 PARAM_PREFIX 將 $value 新增至 $params 陣列。 yii\db\QueryBuilder
build() yii\db\Query 物件產生 SELECT SQL 陳述式。 yii\db\QueryBuilder
buildAndCondition() 使用 ANDOR 運算子連接兩個或多個 SQL 運算式。 yii\db\QueryBuilder
buildBetweenCondition() 使用 BETWEEN 運算子建立 SQL 運算式。 yii\db\QueryBuilder
buildColumns() 處理欄位並在必要時正確地加上引號。 yii\db\QueryBuilder
buildCondition() 解析條件規格並產生對應的 SQL 運算式。 yii\db\QueryBuilder
buildExistsCondition() 使用 EXISTS 運算子建立 SQL 運算式。 yii\db\QueryBuilder
buildExpression() 建立給定的 $expression yii\db\QueryBuilder
buildFrom() yii\db\QueryBuilder
buildGroupBy() yii\db\QueryBuilder
buildHashCondition() 根據欄位-值對建立條件。 yii\db\QueryBuilder
buildHaving() yii\db\QueryBuilder
buildInCondition() 使用 IN 運算子建立 SQL 運算式。 yii\db\QueryBuilder
buildJoin() yii\db\QueryBuilder
buildLikeCondition() 使用 LIKE 運算子建立 SQL 運算式。 yii\db\QueryBuilder
buildLimit() yii\db\cubrid\QueryBuilder
buildNotCondition() 使用 NOT 運算子反轉 SQL 運算式。 yii\db\QueryBuilder
buildOrderBy() yii\db\QueryBuilder
buildOrderByAndLimit() 建立 ORDER BY 和 LIMIT/OFFSET 子句,並將它們附加到給定的 SQL。 yii\db\QueryBuilder
buildSelect() yii\db\QueryBuilder
buildSimpleCondition() 建立類似 "column" operator value 的 SQL 運算式。 yii\db\QueryBuilder
buildUnion() yii\db\QueryBuilder
buildWhere() yii\db\QueryBuilder
buildWithQueries() yii\db\QueryBuilder
canGetProperty() 傳回一個值,指示是否可以讀取屬性。 yii\base\BaseObject
canSetProperty() 傳回一個值,指示是否可以設定屬性。 yii\base\BaseObject
checkIntegrity() 建立 SQL 陳述式,用於啟用或停用完整性檢查。 yii\db\QueryBuilder
className() 傳回此類別的完整限定名稱。 yii\base\BaseObject
createConditionFromArray() 根據 $conditionClasses 對應,將陣列格式定義的 $condition(如 yii\db\Query::where() 中所述)轉換為 yii\db\condition\ConditionInterface 的實例。 yii\db\QueryBuilder
createIndex() 建立 SQL 陳述式,用於建立新的索引。 yii\db\QueryBuilder
createTable() 建立 SQL 陳述式,用於建立新的資料庫表格。 yii\db\QueryBuilder
createView() 建立 SQL 視圖。 yii\db\QueryBuilder
delete() 建立 DELETE SQL 陳述式。 yii\db\QueryBuilder
dropCheck() 建立 SQL 命令,用於刪除檢查約束。 yii\db\cubrid\QueryBuilder
dropColumn() 建立 SQL 陳述式,用於刪除資料庫欄位。 yii\db\QueryBuilder
dropCommentFromColumn() 建立 SQL 命令,用於新增欄位註解。 yii\db\cubrid\QueryBuilder
dropCommentFromTable() 建立 SQL 命令,用於新增表格註解。 yii\db\cubrid\QueryBuilder
dropDefaultValue() 建立 SQL 命令,用於刪除預設值約束。 yii\db\QueryBuilder
dropForeignKey() 建立 SQL 陳述式,用於刪除外鍵約束。 yii\db\QueryBuilder
dropIndex() 建立 SQL 陳述式,用於刪除索引。 yii\db\cubrid\QueryBuilder
dropPrimaryKey() 建立 SQL 陳述式,用於從現有表格中移除主鍵約束。 yii\db\QueryBuilder
dropTable() 建立 SQL 陳述式,用於刪除資料庫表格。 yii\db\QueryBuilder
dropUnique() 建立 SQL 命令,用於刪除唯一約束。 yii\db\QueryBuilder
dropView() 刪除 SQL 視圖。 yii\db\QueryBuilder
executeResetSequence() 執行 SQL 陳述式,用於重設表格主鍵的序列值。 yii\db\QueryBuilder
getColumnType() 將抽象欄位類型轉換為實體欄位類型。 yii\db\QueryBuilder
getExpressionBuilder() 取得適用於 $expression 的 yii\db\ExpressionBuilderInterface 物件。 yii\db\QueryBuilder
hasMethod() 傳回一個值,指示是否已定義方法。 yii\base\BaseObject
hasProperty() 傳回一個值,指示是否已定義屬性。 yii\base\BaseObject
init() 初始化物件。 yii\db\QueryBuilder
insert() 建立 INSERT SQL 陳述式。 yii\db\QueryBuilder
renameColumn() 建立 SQL 陳述式,用於重新命名欄位。 yii\db\QueryBuilder
renameTable() 建立 SQL 陳述式,用於重新命名資料庫表格。 yii\db\QueryBuilder
resetSequence() 建立 SQL 陳述式,用於重設表格主鍵的序列值。 yii\db\cubrid\QueryBuilder
selectExists() 建立 SELECT EXISTS() SQL 陳述式。 yii\db\cubrid\QueryBuilder
setConditionClasses() 設定 $conditionClasses 屬性的 Setter。 yii\db\QueryBuilder
setExpressionBuilders() 設定 $expressionBuilders 屬性的 Setter。 yii\db\QueryBuilder
truncateTable() 建立 SQL 陳述式,用於截斷資料庫表格。 yii\db\QueryBuilder
update() 建立 UPDATE SQL 陳述式。 yii\db\QueryBuilder
upsert() 建立 SQL 陳述式,用於在資料庫表格中插入資料列(如果它們尚不存在,符合唯一約束),如果存在則更新它們。 yii\db\cubrid\QueryBuilder

prepareUpsertColumns()

Constants

常數 Hide inherited constants 描述 定義於
隱藏繼承的常數 Constant 常數 yii\db\QueryBuilder

Value

隱藏繼承的屬性

從抽象欄位類型(鍵)到實體欄位類型(值)的對應。

PARAM_PREFIX

':qp'

隱藏繼承的方法

The prefix for automatically generated query binding parameters.

自動產生的查詢繫結參數的前綴。

呼叫未定義為類別方法的指定名稱方法。

Property Details

屬性詳情
$typeMap public property string

public array $typeMap = [
    \
yii\db\cubrid\Schema::TYPE_PK => 'int NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_UPK => 'int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_BIGPK => 'bigint NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_UBIGPK => 'bigint UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_CHAR => 'char(1)',
    \
yii\db\cubrid\Schema::TYPE_STRING => 'varchar(255)',
    \
yii\db\cubrid\Schema::TYPE_TEXT => 'varchar',
    \
yii\db\cubrid\Schema::TYPE_TINYINT => 'smallint',
    \
yii\db\cubrid\Schema::TYPE_SMALLINT => 'smallint',
    \
yii\db\cubrid\Schema::TYPE_INTEGER => 'int',
    \
yii\db\cubrid\Schema::TYPE_BIGINT => 'bigint',
    \
yii\db\cubrid\Schema::TYPE_FLOAT => 'float(7)',
    \
yii\db\cubrid\Schema::TYPE_DOUBLE => 'double(15)',
    \
yii\db\cubrid\Schema::TYPE_DECIMAL => 'decimal(10,0)',
    \
yii\db\cubrid\Schema::TYPE_DATETIME => 'datetime',
    \
yii\db\cubrid\Schema::TYPE_TIMESTAMP => 'timestamp',
    \
yii\db\cubrid\Schema::TYPE_TIME => 'time',
    \
yii\db\cubrid\Schema::TYPE_DATE => 'date',
    \
yii\db\cubrid\Schema::TYPE_BINARY => 'blob',
    \
yii\db\cubrid\Schema::TYPE_BOOLEAN => 'smallint',
    \
yii\db\cubrid\Schema::TYPE_MONEY => 'decimal(19,4)',
]

Method Details array

方法詳情

__call() public method 公開方法

Defined in: yii\base\BaseObject::__call()

定義於: yii\base\BaseObject::__call() Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當調用未知方法時會隱含地被呼叫。

__call ( $name, $params )

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
public mixed __call ( $name, $params )

$name

建構子。

$name
The method name yii\db\Connection

資料庫連線。

方法名稱 array

$params

__call ( $name, $params )

                public function __construct($connection, $config = [])
{
    $this->db = $connection;
    parent::__construct($config);
}

            
$params

Method parameters

傳回物件屬性的值。

方法參數

return

傳回
$typeMap public property string

mixed

__call() public method 公開方法

mixed

定義於: yii\base\BaseObject::__call() The method return value

方法傳回值

定義於: yii\base\BaseObject::__call() throws

拋出

__call ( $name, $params )

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
yii\base\UnknownMethodException

yii\base\UnknownMethodException

檢查屬性是否已設定,即已定義且非 null。

when calling unknown method

當呼叫未知方法時

Source code

原始碼
$typeMap public property string

__construct() public method

__call() public method 公開方法

Defined in: yii\db\QueryBuilder::__construct()

__call ( $name, $params )

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            

public void __construct ( $connection, $config = [] )

設定物件屬性的值。

public void __construct ( $connection, $config = [] )

$connection

$connection
$typeMap public property string

__construct() public method

$config 公開方法

mixed

定義於: yii\base\BaseObject::__call() The method return value

方法傳回值

定義於: yii\base\BaseObject::__call() throws

$config

__call ( $name, $params )

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
Name-value pairs that will be used to initialize the object properties

將用於初始化物件屬性的名稱-值對。

將物件屬性設定為 null。

__get() public method

公開方法

Defined in: yii\base\BaseObject::__get()

定義於: yii\base\BaseObject::__get()
$typeMap public property string

mixed

定義於: yii\base\BaseObject::__call() throws

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $value = $object->property;.

__call ( $name, $params )

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 $value = $object->property; 時會隱含地被呼叫。

建立 SQL 命令,用於將檢查約束新增至現有表格。

See also __set().
$typeMap public property string

另請參閱 __set()

public mixed __get ( $name ) string

public mixed __get ( $name )

The property name string

屬性名稱

__call() public method string

The property value

定義於: yii\base\BaseObject::__call() 屬性值

yii\base\UnknownPropertyException

__call ( $name, $params )

                public function addCheck($name, $table, $expression)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by CUBRID.');
}

            
yii\base\UnknownPropertyException

if the property is not defined

建立 SQL 陳述式,用於新增新的資料庫欄位。

如果屬性未定義
public mixed __get ( $name ) string

yii\base\InvalidCallException

yii\base\InvalidCallException string

if the property is write-only

如果屬性為唯寫 string

__isset() public method

__call() public method string

公開方法

__call ( $name, $params )

                public function addColumn($table, $column, $type)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' ADD ' . $this->db->quoteColumnName($column) . ' '
        . $this->getColumnType($type);
}

            

建立 SQL 命令,用於新增欄位註解。

定義於: yii\base\BaseObject::__isset()
public mixed __get ( $name ) string

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($object->property).

yii\base\InvalidCallException string

請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 isset($object->property) 時會隱含地被呼叫。

Note that if the property is not defined, false will be returned. string

請注意,如果屬性未定義,將傳回 false。

__call() public method string

See also https://php.dev.org.tw/manual/en/function.isset.php.

__call ( $name, $params )

                public function addCommentOnColumn($table, $column, $comment)
{
    $definition = $this->getColumnDefinition($table, $column);
    $definition = trim(preg_replace("/COMMENT '(.*?)'/i", '', $definition));
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
    . ' CHANGE ' . $this->db->quoteColumnName($column)
    . ' ' . $this->db->quoteColumnName($column)
    . (empty($definition) ? '' : ' ' . $definition)
    . ' COMMENT ' . $this->db->quoteValue($comment);
}

            

建立 SQL 命令,用於新增表格註解。

public boolean __isset ( $name )
public mixed __get ( $name ) string

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($object->property).

Note that if the property is not defined, false will be returned. string

請注意,如果屬性未定義,將傳回 false。

__call() public method string

public boolean __isset ( $name )

__call ( $name, $params )

                public function addCommentOnTable($table, $comment)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' COMMENT ' . $this->db->quoteValue($comment);
}

            
The property name or the event name

屬性名稱或事件名稱

建立 SQL 命令,用於將預設值約束新增至現有表格。

boolean
$typeMap public property string

boolean

public mixed __get ( $name ) string

Whether the named property is set (not null).

yii\base\InvalidCallException string

具名屬性是否已設定(非 null)。

$config 公開方法

__set() public method

__call() public method string

公開方法

定義於: yii\base\BaseObject::__call() 屬性值

Defined in: yii\base\BaseObject::__set()

__call ( $name, $params )

                public function addDefaultValue($name, $table, $column, $value)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support adding default value constraints.');
}

            

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $object->property = $value;.

建立 SQL 陳述式,用於將外鍵約束新增至現有表格。

請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 $object->property = $value; 時會隱含地被呼叫。

See also __get().
$typeMap public property string

另請參閱 __get()

public mixed __get ( $name ) string

public void __set ( $name, $value )

public void __set ( $name, $value ) $value

$value

if the property is read-only string

如果屬性為唯讀

__unset() public method $value

公開方法

Defined in: yii\base\BaseObject::__unset() 定義於: yii\base\BaseObject::__unset()

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing unset($object->property).

請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 unset($object->property) 時會隱含地被呼叫。 定義於: yii\base\BaseObject::__unset()

Note that if the property is not defined, this method will do nothing. If the property is read-only, it will throw an exception.

__call() public method string

請注意,如果屬性未定義,此方法將不執行任何操作。如果屬性為唯讀,則會拋出例外。

__call ( $name, $params )

                public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null)
{
    $sql = 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' ADD CONSTRAINT ' . $this->db->quoteColumnName($name)
        . ' FOREIGN KEY (' . $this->buildColumns($columns) . ')'
        . ' REFERENCES ' . $this->db->quoteTableName($refTable)
        . ' (' . $this->buildColumns($refColumns) . ')';
    if ($delete !== null) {
        $sql .= ' ON DELETE ' . $delete;
    }
    if ($update !== null) {
        $sql .= ' ON UPDATE ' . $update;
    }
    return $sql;
}

            

另請參閱 https://php.dev.org.tw/manual/en/function.unset.php

建立 SQL 陳述式,用於將主鍵約束新增至現有表格。

public void __unset ( $name )
$typeMap public property string

public void __unset ( $name )

public mixed __get ( $name ) string

if the property is read only.

public void __set ( $name, $value ) $value

逗號分隔的字串或欄位陣列,表示主要索引鍵將由哪些欄位組成。

__call() public method string

將主索引鍵約束新增至現有資料表的 SQL 陳述式。

__call ( $name, $params )

                public function addPrimaryKey($name, $table, $columns)
{
    if (is_string($columns)) {
        $columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
    }
    foreach ($columns as $i => $col) {
        $columns[$i] = $this->db->quoteColumnName($col);
    }
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
        . $this->db->quoteColumnName($name) . ' PRIMARY KEY ('
        . implode(', ', $columns) . ')';
}

            
addUnique() public method (自 2.0.13 版本起可用)

定義於: yii\db\QueryBuilder::addUnique()

建立 SQL 命令,用於將唯一約束新增至現有表格。

public string addUnique ( $name, $table, $columns )
$typeMap public property string

唯一性約束的名稱。此名稱將由方法正確地加上引號。

public mixed __get ( $name ) string

將新增唯一性約束的資料表。此名稱將由方法正確地加上引號。

public void __set ( $name, $value ) $value

要對其新增約束的欄位名稱。如果有多個欄位,請用逗號分隔它們。此名稱將由方法正確地加上引號。

__call() public method string

將唯一性約束新增至現有資料表的 SQL 陳述式。

__call ( $name, $params )

                public function addUnique($name, $table, $columns)
{
    if (is_string($columns)) {
        $columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
    }
    foreach ($columns as $i => $col) {
        $columns[$i] = $this->db->quoteColumnName($col);
    }
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
        . $this->db->quoteColumnName($name) . ' UNIQUE ('
        . implode(', ', $columns) . ')';
}

            
alterColumn() public method

定義於: yii\db\QueryBuilder::alterColumn()

建立 SQL 陳述式,用於變更欄位的定義。

public string alterColumn ( $table, $column, $type )
public mixed __get ( $name ) string

要變更欄位的資料表。資料表名稱將由方法正確地加上引號。

yii\base\InvalidCallException string

要變更的欄位名稱。此名稱將由方法正確地加上引號。

如果屬性為唯寫 string

新的欄位類型。getColumnType() 方法將被調用,以將抽象欄位類型(如果有的話)轉換為實體欄位類型。任何未被識別為抽象類型的內容都將保留在產生的 SQL 中。例如,'string' 將被轉換為 'varchar(255)',而 'string not null' 將變為 'varchar(255) not null'。

__call() public method string

用於變更欄位定義的 SQL 陳述式。

__call ( $name, $params )

                public function alterColumn($table, $column, $type)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' CHANGE '
        . $this->db->quoteColumnName($column) . ' '
        . $this->db->quoteColumnName($column) . ' '
        . $this->getColumnType($type);
}

            
batchInsert() public method

定義於: yii\db\QueryBuilder::batchInsert()

產生批次 INSERT SQL 陳述式。

例如,

$sql = $queryBuilder->batchInsert('user', ['name', 'age'], [
    ['Tom', 30],
    ['Jane', 20],
    ['Linda', 25],
]);

請注意,每列中的值必須與對應的欄位名稱相符。

此方法將正確地逸出欄位名稱,並為要插入的值加上引號。

public string batchInsert ( $table, $columns, $rows, &$params = [] )
public mixed __get ( $name ) string

新列將被插入的資料表。

public void __set ( $name, $value ) array

欄位名稱

$rows array|Generator

要批次插入資料表中的列

Method Details array

綁定參數。此參數自 2.0.14 版本起存在

__call() public method string

批次 INSERT SQL 陳述式

__call ( $name, $params )

                public function batchInsert($table, $columns, $rows, &$params = [])
{
    if (empty($rows)) {
        return '';
    }
    $schema = $this->db->getSchema();
    if (($tableSchema = $schema->getTableSchema($table)) !== null) {
        $columnSchemas = $tableSchema->columns;
    } else {
        $columnSchemas = [];
    }
    $values = [];
    foreach ($rows as $row) {
        $vs = [];
        foreach ($row as $i => $value) {
            if (isset($columns[$i], $columnSchemas[$columns[$i]])) {
                $value = $columnSchemas[$columns[$i]]->dbTypecast($value);
            }
            if (is_string($value)) {
                $value = $schema->quoteValue($value);
            } elseif (is_float($value)) {
                // ensure type cast always has . as decimal separator in all locales
                $value = StringHelper::floatToString($value);
            } elseif ($value === false) {
                $value = 0;
            } elseif ($value === null) {
                $value = 'NULL';
            } elseif ($value instanceof ExpressionInterface) {
                $value = $this->buildExpression($value, $params);
            }
            $vs[] = $value;
        }
        $values[] = '(' . implode(', ', $vs) . ')';
    }
    if (empty($values)) {
        return '';
    }
    foreach ($columns as $i => $name) {
        $columns[$i] = $schema->quoteColumnName($name);
    }
    return 'INSERT INTO ' . $schema->quoteTableName($table)
        . ' (' . implode(', ', $columns) . ') VALUES ' . implode(', ', $values);
}

            
bindParam() public method (自 2.0.14 版本起可用)

定義於: yii\db\QueryBuilder::bindParam()

輔助方法,使用 PARAM_PREFIX 將 $value 新增至 $params 陣列。

public string bindParam ( $value, &$params )
$config 定義於: yii\base\BaseObject::__unset()
Method Details array

以引用方式傳遞

__call() public method string

$params 陣列中的佔位符名稱

__call ( $name, $params )

                public function bindParam($value, &$params)
{
    $phName = self::PARAM_PREFIX . count($params);
    $params[$phName] = $value;
    return $phName;
}

            
build() public method

定義於: yii\db\QueryBuilder::build()

yii\db\Query 物件產生 SELECT SQL 陳述式。

public array build ( $query, $params = [] )
$query yii\db\Query

將從中產生 SQL 陳述式的 yii\db\Query 物件。

Method Details array

要綁定到產生的 SQL 陳述式的參數。這些參數將與查詢建構過程中產生的額外參數一起包含在結果中。

__call() public method array

產生的 SQL 陳述式(第一個陣列元素)和要綁定到 SQL 陳述式的對應參數(第二個陣列元素)。傳回的參數包含 $params 中提供的參數。

__call ( $name, $params )

                public function build($query, $params = [])
{
    $query = $query->prepare($this);
    $params = empty($params) ? $query->params : array_merge($params, $query->params);
    $clauses = [
        $this->buildSelect($query->select, $params, $query->distinct, $query->selectOption),
        $this->buildFrom($query->from, $params),
        $this->buildJoin($query->join, $params),
        $this->buildWhere($query->where, $params),
        $this->buildGroupBy($query->groupBy),
        $this->buildHaving($query->having, $params),
    ];
    $sql = implode($this->separator, array_filter($clauses));
    $sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset);
    if (!empty($query->orderBy)) {
        foreach ($query->orderBy as $expression) {
            if ($expression instanceof ExpressionInterface) {
                $this->buildExpression($expression, $params);
            }
        }
    }
    if (!empty($query->groupBy)) {
        foreach ($query->groupBy as $expression) {
            if ($expression instanceof ExpressionInterface) {
                $this->buildExpression($expression, $params);
            }
        }
    }
    $union = $this->buildUnion($query->union, $params);
    if ($union !== '') {
        $sql = "($sql){$this->separator}$union";
    }
    $with = $this->buildWithQueries($query->withQueries, $params);
    if ($with !== '') {
        $sql = "$with{$this->separator}$sql";
    }
    return [$sql, $params];
}

            
buildAndCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildAndCondition()

使用 ANDOR 運算子連接兩個或多個 SQL 運算式。

public string buildAndCondition ( $operator, $operands, &$params )
$operator string

用於連接給定運算元的運算符

$operands array

要連接的 SQL 運算式。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

__call ( $name, $params )

                public function buildAndCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildBetweenCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildBetweenCondition()

使用 BETWEEN 運算子建立 SQL 運算式。

public string buildBetweenCondition ( $operator, $operands, &$params )
$operator string

要使用的運算符(例如 BETWEENNOT BETWEEN

$operands array

第一個運算元是欄位名稱。第二個和第三個運算元描述欄位值應在的區間。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

如果給定的運算元數量錯誤。

__call ( $name, $params )

                public function buildBetweenCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildColumns() public method

定義於: yii\db\QueryBuilder::buildColumns()

處理欄位並在必要時正確地加上引號。

它將把所有欄位與逗號分隔符號連接成一個字串。

public string buildColumns ( $columns )
public void __set ( $name, $value ) $value

要處理的欄位

__call() public method string

處理結果

__call ( $name, $params )

                public function buildColumns($columns)
{
    if (!is_array($columns)) {
        if (strpos($columns, '(') !== false) {
            return $columns;
        }
        $rawColumns = $columns;
        $columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
        if ($columns === false) {
            throw new InvalidArgumentException("$rawColumns is not valid columns.");
        }
    }
    foreach ($columns as $i => $column) {
        if ($column instanceof ExpressionInterface) {
            $columns[$i] = $this->buildExpression($column);
        } elseif (strpos($column, '(') === false) {
            $columns[$i] = $this->db->quoteColumnName($column);
        }
    }
    return implode(', ', $columns);
}

            
buildCondition() public method

定義於: yii\db\QueryBuilder::buildCondition()

解析條件規格並產生對應的 SQL 運算式。

public string buildCondition ( $condition, &$params )
$condition string|array|yii\db\ExpressionInterface

條件規格。請參閱 yii\db\Query::where() 以了解如何指定條件。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

__call ( $name, $params )

                public function buildCondition($condition, &$params)
{
    if (is_array($condition)) {
        if (empty($condition)) {
            return '';
        }
        $condition = $this->createConditionFromArray($condition);
    }
    if ($condition instanceof ExpressionInterface) {
        return $this->buildExpression($condition, $params);
    }
    return (string)$condition;
}

            
buildExistsCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildExistsCondition()

使用 EXISTS 運算子建立 SQL 運算式。

public string buildExistsCondition ( $operator, $operands, &$params )
$operator string

要使用的運算符(例如 EXISTSNOT EXISTS

$operands array

僅包含一個元素,即代表子查詢的 yii\db\Query 物件。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

如果運算元不是 yii\db\Query 物件。

__call ( $name, $params )

                public function buildExistsCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildExpression() public method (自 2.0.14 版本起可用)
public yii\db\ExpressionInterface buildExpression ( yii\db\ExpressionInterface $expression, &$params = [] )
The property name yii\db\ExpressionInterface

要建構的運算式

Method Details array

要綁定到產生的 SQL 陳述式的參數。這些參數將與運算式建構過程中產生的額外參數一起包含在結果中。

__call() public method string

SQL 陳述式,在傳遞給 DBMS 之前,既不會被加上引號也不會被編碼

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

當此 QueryBuilder 不支援 $expression 建構時。

__call ( $name, $params )

                public function buildExpression(ExpressionInterface $expression, &$params = [])
{
    $builder = $this->getExpressionBuilder($expression);
    return $builder->build($expression, $params);
}

            
buildFrom() public method
public string buildFrom ( $tables, &$params )
$tables array
Method Details array

要填入的綁定參數

__call() public method string

yii\db\Query::$from 建構的 FROM 子句。

__call ( $name, $params )

                public function buildFrom($tables, &$params)
{
    if (empty($tables)) {
        return '';
    }
    $tables = $this->quoteTableNames($tables, $params);
    return 'FROM ' . implode(', ', $tables);
}

            
buildGroupBy() public method
public string buildGroupBy ( $columns )
public void __set ( $name, $value ) array
__call() public method string

GROUP BY 子句

__call ( $name, $params )

                public function buildGroupBy($columns)
{
    if (empty($columns)) {
        return '';
    }
    foreach ($columns as $i => $column) {
        if ($column instanceof ExpressionInterface) {
            $columns[$i] = $this->buildExpression($column);
        } elseif (strpos($column, '(') === false) {
            $columns[$i] = $this->db->quoteColumnName($column);
        }
    }
    return 'GROUP BY ' . implode(', ', $columns);
}

            
buildHashCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildHashCondition()

根據欄位-值對建立條件。

public string buildHashCondition ( $condition, &$params )
$condition array

條件規格。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

__call ( $name, $params )

                public function buildHashCondition($condition, &$params)
{
    return $this->buildCondition(new HashCondition($condition), $params);
}

            
buildHaving() public method
public string buildHaving ( $condition, &$params )
$condition $value
Method Details array

要填入的綁定參數

__call() public method string

yii\db\Query::$having 建構的 HAVING 子句。

__call ( $name, $params )

                public function buildHaving($condition, &$params)
{
    $having = $this->buildCondition($condition, $params);
    return $having === '' ? '' : 'HAVING ' . $having;
}

            
buildInCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildInCondition()

使用 IN 運算子建立 SQL 運算式。

public string buildInCondition ( $operator, $operands, &$params )
$operator string

要使用的運算符(例如 INNOT IN

$operands array

第一個運算元是欄位名稱。如果它是一個陣列,將產生複合 IN 條件。第二個運算元是欄位值應在其中的值陣列。如果它是一個空陣列,則產生的運算式在運算符為 IN 時將為 false 值,而在運算符為 NOT IN 時為空。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

定義於: yii\base\BaseObject::__call() yii\db\Exception

如果給定的運算元數量錯誤。

__call ( $name, $params )

                public function buildInCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildJoin() public method
public string buildJoin ( $joins, &$params )
$joins array
Method Details array

要填入的綁定參數

__call() public method string

yii\db\Query::$join 建構的 JOIN 子句。

定義於: yii\base\BaseObject::__call() yii\db\Exception

如果 $joins 參數格式不正確

__call ( $name, $params )

                public function buildJoin($joins, &$params)
{
    if (empty($joins)) {
        return '';
    }
    foreach ($joins as $i => $join) {
        if (!is_array($join) || !isset($join[0], $join[1])) {
            throw new Exception('A join clause must be specified as an array of join type, join table, and optionally join condition.');
        }
        // 0:join type, 1:join table, 2:on-condition (optional)
        list($joinType, $table) = $join;
        $tables = $this->quoteTableNames((array)$table, $params);
        $table = reset($tables);
        $joins[$i] = "$joinType $table";
        if (isset($join[2])) {
            $condition = $this->buildCondition($join[2], $params);
            if ($condition !== '') {
                $joins[$i] .= ' ON ' . $condition;
            }
        }
    }
    return implode($this->separator, $joins);
}

            
buildLikeCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildLikeCondition()

使用 LIKE 運算子建立 SQL 運算式。

public string buildLikeCondition ( $operator, $operands, &$params )
$operator string

要使用的運算符(例如 LIKENOT LIKEOR LIKEOR NOT LIKE

$operands array

由兩個或三個運算元組成的陣列

  • 第一個運算元是欄位名稱。
  • 第二個運算元是單個值或值陣列,欄位值應與之比較。如果它是一個空陣列,則產生的運算式在運算符為 LIKEOR LIKE 時將為 false 值,而在運算符為 NOT LIKEOR NOT LIKE 時為空。
  • 也可以提供可選的第三個運算元,以指定如何逸出值中的特殊字元。運算元應為從特殊字元到其逸出對應項的映射陣列。如果未提供此運算元,將使用預設逸出映射。您可以使用 false 或空陣列來指示值已逸出,不應應用逸出。請注意,當使用逸出映射時(或未提供第三個運算元時),這些值將自動包含在一對百分比字元中。
Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

如果給定的運算元數量錯誤。

__call ( $name, $params )

                public function buildLikeCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildLimit() public method

public string buildLimit ( $limit, $offset )
$limit integer
$offset integer
__call() public method string

LIMIT 和 OFFSET 子句

__call ( $name, $params )

                public function buildLimit($limit, $offset)
{
    $sql = '';
    // limit is not optional in CUBRID
    // https://www.cubrid.org/manual/en/9.3.0/sql/query/select.html#limit-clause
    // "You can specify a very big integer for row_count to display to the last row, starting from a specific row."
    if ($this->hasLimit($limit)) {
        $sql = 'LIMIT ' . $limit;
        if ($this->hasOffset($offset)) {
            $sql .= ' OFFSET ' . $offset;
        }
    } elseif ($this->hasOffset($offset)) {
        $sql = "LIMIT 9223372036854775807 OFFSET $offset"; // 2^63-1
    }
    return $sql;
}

            
buildNotCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildNotCondition()

使用 NOT 運算子反轉 SQL 運算式。

public string buildNotCondition ( $operator, $operands, &$params )
$operator string

用於連接給定運算元的運算符

$operands array

要連接的 SQL 運算式。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

如果給定的運算元數量錯誤。

__call ( $name, $params )

                public function buildNotCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildOrderBy() public method
public string buildOrderBy ( $columns )
public void __set ( $name, $value ) array
__call() public method string

yii\db\Query::$orderBy 建構的 ORDER BY 子句。

__call ( $name, $params )

                public function buildOrderBy($columns)
{
    if (empty($columns)) {
        return '';
    }
    $orders = [];
    foreach ($columns as $name => $direction) {
        if ($direction instanceof ExpressionInterface) {
            $orders[] = $this->buildExpression($direction);
        } else {
            $orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
        }
    }
    return 'ORDER BY ' . implode(', ', $orders);
}

            
buildOrderByAndLimit() public method

定義於: yii\db\QueryBuilder::buildOrderByAndLimit()

建立 ORDER BY 和 LIMIT/OFFSET 子句,並將它們附加到給定的 SQL。

public string buildOrderByAndLimit ( $sql, $orderBy, $limit, $offset )
$sql string

現有的 SQL (不含 ORDER BY/LIMIT/OFFSET)

$orderBy array

排序依據欄位。有關如何指定此參數的更多詳細資訊,請參閱 yii\db\Query::orderBy()

$limit integer

限制數量。有關更多詳細資訊,請參閱 yii\db\Query::limit()

$offset integer

偏移量。有關更多詳細資訊,請參閱 yii\db\Query::offset()

__call() public method string

完成 ORDER BY/LIMIT/OFFSET 的 SQL(如果有的話)

__call ( $name, $params )

                public function buildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
    $orderBy = $this->buildOrderBy($orderBy);
    if ($orderBy !== '') {
        $sql .= $this->separator . $orderBy;
    }
    $limit = $this->buildLimit($limit, $offset);
    if ($limit !== '') {
        $sql .= $this->separator . $limit;
    }
    return $sql;
}

            
buildSelect() public method
public string buildSelect ( $columns, &$params, $distinct false, $selectOption null )
public void __set ( $name, $value ) array
Method Details array

要填入的綁定參數

$distinct 公開方法
$selectOption 定義於: yii\base\BaseObject::__unset()
__call() public method string

yii\db\Query::$select 建構的 SELECT 子句。

__call ( $name, $params )

                public function buildSelect($columns, &$params, $distinct = false, $selectOption = null)
{
    $select = $distinct ? 'SELECT DISTINCT' : 'SELECT';
    if ($selectOption !== null) {
        $select .= ' ' . $selectOption;
    }
    if (empty($columns)) {
        return $select . ' *';
    }
    foreach ($columns as $i => $column) {
        if ($column instanceof ExpressionInterface) {
            if (is_int($i)) {
                $columns[$i] = $this->buildExpression($column, $params);
            } else {
                $columns[$i] = $this->buildExpression($column, $params) . ' AS ' . $this->db->quoteColumnName($i);
            }
        } elseif ($column instanceof Query) {
            list($sql, $params) = $this->build($column, $params);
            $columns[$i] = "($sql) AS " . $this->db->quoteColumnName($i);
        } elseif (is_string($i) && $i !== $column) {
            if (strpos($column, '(') === false) {
                $column = $this->db->quoteColumnName($column);
            }
            $columns[$i] = "$column AS " . $this->db->quoteColumnName($i);
        } elseif (strpos($column, '(') === false) {
            if (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $column, $matches)) {
                $columns[$i] = $this->db->quoteColumnName($matches[1]) . ' AS ' . $this->db->quoteColumnName($matches[2]);
            } else {
                $columns[$i] = $this->db->quoteColumnName($column);
            }
        }
    }
    return $select . ' ' . implode(', ', $columns);
}

            
buildSimpleCondition() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

定義於: yii\db\QueryBuilder::buildSimpleCondition()

建立類似 "column" operator value 的 SQL 運算式。

public string buildSimpleCondition ( $operator, $operands, &$params )
$operator string

要使用的運算符。可以使用任何符號,例如 ><= 等。

$operands array

包含兩個欄位名稱。

Method Details array

要填入的綁定參數

__call() public method string

產生的 SQL 運算式

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

如果給定的運算元數量錯誤。

__call ( $name, $params )

                public function buildSimpleCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildUnion() public method
public string buildUnion ( $unions, &$params )
$unions array
Method Details array

要填入的綁定參數

__call() public method string

yii\db\Query::$union 建構的 UNION 子句。

__call ( $name, $params )

                public function buildUnion($unions, &$params)
{
    if (empty($unions)) {
        return '';
    }
    $result = '';
    foreach ($unions as $i => $union) {
        $query = $union['query'];
        if ($query instanceof Query) {
            list($unions[$i]['query'], $params) = $this->build($query, $params);
        }
        $result .= 'UNION ' . ($union['all'] ? 'ALL ' : '') . '( ' . $unions[$i]['query'] . ' ) ';
    }
    return trim($result);
}

            
buildWhere() public method
public string buildWhere ( $condition, &$params )
$condition $value
Method Details array

要填入的綁定參數

__call() public method string

yii\db\Query::$where 建構的 WHERE 子句。

__call ( $name, $params )

                public function buildWhere($condition, &$params)
{
    $where = $this->buildCondition($condition, $params);
    return $where === '' ? '' : 'WHERE ' . $where;
}

            
buildWithQueries() public method (自 2.0.35 版本起可用)
public string buildWithQueries ( $withs, &$params )
$withs array

每個 WITH 查詢的設定

Method Details array

要填入的綁定參數

__call() public method string

已編譯的 WITH 查詢前綴,包含巢狀查詢

__call ( $name, $params )

                public function buildWithQueries($withs, &$params)
{
    if (empty($withs)) {
        return '';
    }
    $recursive = false;
    $result = [];
    foreach ($withs as $i => $with) {
        if ($with['recursive']) {
            $recursive = true;
        }
        $query = $with['query'];
        if ($query instanceof Query) {
            list($with['query'], $params) = $this->build($query, $params);
        }
        $result[] = $with['alias'] . ' AS (' . $with['query'] . ')';
    }
    return 'WITH ' . ($recursive ? 'RECURSIVE ' : '') . implode(', ', $result);
}

            
canGetProperty() public method

定義於: yii\base\BaseObject::canGetProperty()

傳回一個值,指示是否可以讀取屬性。

當屬性可讀取的條件:

  • 類別具有與指定名稱相關聯的 getter 方法(在此情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);

另請參閱 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true )
$typeMap public property string

mixed

$checkVars 公開方法

是否將成員變數視為屬性

__call() public method 公開方法

屬性是否可讀取

__call ( $name, $params )

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

定義於: yii\base\BaseObject::canSetProperty()

傳回一個值,指示是否可以設定屬性。

當屬性可寫入的條件:

  • 類別具有與指定名稱相關聯的 setter 方法(在此情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);

另請參閱 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true )
$typeMap public property string

mixed

$checkVars 公開方法

是否將成員變數視為屬性

__call() public method 公開方法

屬性是否可寫入

__call ( $name, $params )

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
checkIntegrity() public method

定義於: yii\db\QueryBuilder::checkIntegrity()

建立 SQL 陳述式,用於啟用或停用完整性檢查。

public string checkIntegrity ( $check true, $schema '', $table '' )
$check 公開方法

是否開啟或關閉完整性檢查。

$schema string

表格的結構描述。預設為空字串,表示目前的或預設的結構描述。

public mixed __get ( $name ) string

表格名稱。預設為空字串,表示不變更任何表格。

__call() public method string

用於檢查完整性的 SQL 陳述式

定義於: yii\base\BaseObject::__call() 屬性值

如果底層 DBMS 不支援此功能

__call ( $name, $params )

                public function checkIntegrity($check = true, $schema = '', $table = '')
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support enabling/disabling integrity check.');
}

            
className() public static method
自 2.0.14 版本起已過時。在 PHP >=5.5 版本中,請改用 ::class

定義於: yii\base\BaseObject::className()

傳回此類別的完整限定名稱。

public static string className ( )
__call() public method string

此類別的完整限定名稱。

__call ( $name, $params )

                public static function className()
{
    return get_called_class();
}

            
createConditionFromArray() public method (available since version 2.0.14)

定義於: yii\db\QueryBuilder::createConditionFromArray()

根據 $conditionClasses 對應,將陣列格式定義的 $condition(如 yii\db\Query::where() 中所述)轉換為 yii\db\condition\ConditionInterface 的實例。

另請參閱 $conditionClasses

public yii\db\conditions\ConditionInterface createConditionFromArray ( $condition )
$condition $value

__call ( $name, $params )

                public function createConditionFromArray($condition)
{
    if (isset($condition[0])) { // operator format: operator, operand 1, operand 2, ...
        $operator = strtoupper(array_shift($condition));
        if (isset($this->conditionClasses[$operator])) {
            $className = $this->conditionClasses[$operator];
        } else {
            $className = 'yii\db\conditions\SimpleCondition';
        }
        /** @var ConditionInterface $className */
        return $className::fromArrayDefinition($operator, $condition);
    }
    // hash format: 'column1' => 'value1', 'column2' => 'value2', ...
    return new HashCondition($condition);
}

            
createIndex() public method

定義於: yii\db\QueryBuilder::createIndex()

建立 SQL 陳述式,用於建立新的索引。

public string createIndex ( $name, $table, $columns, $unique false )
$typeMap public property string

索引的名稱。名稱將由此方法正確地加上引號。

public mixed __get ( $name ) string

將在其中建立新索引的表格。表格名稱將由此方法正確地加上引號。

public void __set ( $name, $value ) $value

應包含在索引中的欄位。如果有多個欄位,請用逗號分隔或使用陣列表示。除非在名稱中找到括號,否則每個欄位名稱都將由此方法正確地加上引號。

$unique 公開方法

是否在新建立的索引上新增 UNIQUE 限制。

__call() public method string

用於建立新索引的 SQL 陳述式。

__call ( $name, $params )

                public function createIndex($name, $table, $columns, $unique = false)
{
    return ($unique ? 'CREATE UNIQUE INDEX ' : 'CREATE INDEX ')
        . $this->db->quoteTableName($name) . ' ON '
        . $this->db->quoteTableName($table)
        . ' (' . $this->buildColumns($columns) . ')';
}

            
createTable() public method

定義於: yii\db\QueryBuilder::createTable()

建立 SQL 陳述式,用於建立新的資料庫表格。

新表格中的欄位應指定為名稱-定義配對(例如 'name' => 'string'),其中 name 代表欄位名稱,將由此方法正確地加上引號,而 definition 代表欄位類型,必須包含抽象 DB 類型。getColumnType() 方法將被調用以將任何抽象類型轉換為實體類型。

如果僅使用定義指定欄位(例如 'PRIMARY KEY (name, type)'),它將直接插入到產生的 SQL 中。

例如,

$sql = $queryBuilder->createTable('user', [
 'id' => 'pk',
 'name' => 'string',
 'age' => 'integer',
 'column_name double precision null default null', # definition only example
]);
public string createTable ( $table, $columns, $options null )
public mixed __get ( $name ) string

要建立的表格名稱。名稱將由此方法正確地加上引號。

public void __set ( $name, $value ) array

新表格中的欄位(名稱 => 定義)。

$options 定義於: yii\base\BaseObject::__unset()

將附加到產生的 SQL 的其他 SQL 片段。

__call() public method string

用於建立新 DB 表格的 SQL 陳述式。

__call ( $name, $params )

                public function createTable($table, $columns, $options = null)
{
    $cols = [];
    foreach ($columns as $name => $type) {
        if (is_string($name)) {
            $cols[] = "\t" . $this->db->quoteColumnName($name) . ' ' . $this->getColumnType($type);
        } else {
            $cols[] = "\t" . $type;
        }
    }
    $sql = 'CREATE TABLE ' . $this->db->quoteTableName($table) . " (\n" . implode(",\n", $cols) . "\n)";
    return $options === null ? $sql : $sql . ' ' . $options;
}

            
createView() public method (available since version 2.0.14)

定義於: yii\db\QueryBuilder::createView()

建立 SQL 視圖。

public string createView ( $viewName, $subQuery )
$viewName string

要建立的視圖名稱。

$subQuery string|yii\db\Query

定義視圖的 select 陳述式。這可以是字串或 yii\db\Query 物件。

__call() public method string

CREATE VIEW SQL 陳述式。

__call ( $name, $params )

                public function createView($viewName, $subQuery)
{
    if ($subQuery instanceof Query) {
        list($rawQuery, $params) = $this->build($subQuery);
        array_walk(
            $params,
            function (&$param) {
                $param = $this->db->quoteValue($param);
            }
        );
        $subQuery = strtr($rawQuery, $params);
    }
    return 'CREATE VIEW ' . $this->db->quoteTableName($viewName) . ' AS ' . $subQuery;
}

            
defaultConditionClasses() protected method (available since version 2.0.14)

定義於: yii\db\QueryBuilder::defaultConditionClasses()

defaultConditionClasses()

另請參閱 $conditionClasses

protected array defaultConditionClasses ( )

__call ( $name, $params )

                protected function defaultConditionClasses()
{
    return [
        'NOT' => 'yii\db\conditions\NotCondition',
        'AND' => 'yii\db\conditions\AndCondition',
        'OR' => 'yii\db\conditions\OrCondition',
        'BETWEEN' => 'yii\db\conditions\BetweenCondition',
        'NOT BETWEEN' => 'yii\db\conditions\BetweenCondition',
        'IN' => 'yii\db\conditions\InCondition',
        'NOT IN' => 'yii\db\conditions\InCondition',
        'LIKE' => 'yii\db\conditions\LikeCondition',
        'NOT LIKE' => 'yii\db\conditions\LikeCondition',
        'OR LIKE' => 'yii\db\conditions\LikeCondition',
        'OR NOT LIKE' => 'yii\db\conditions\LikeCondition',
        'EXISTS' => 'yii\db\conditions\ExistsCondition',
        'NOT EXISTS' => 'yii\db\conditions\ExistsCondition',
    ];
}

            
defaultExpressionBuilders() protected method (available since version 2.0.14)

defaultExpressionBuilders()

protected array defaultExpressionBuilders ( )

__call ( $name, $params )

                protected function defaultExpressionBuilders()
{
    return array_merge(parent::defaultExpressionBuilders(), [
        'yii\db\conditions\LikeCondition' => 'yii\db\cubrid\conditions\LikeConditionBuilder',
    ]);
}

            
delete() public method

定義於: yii\db\QueryBuilder::delete()

建立 DELETE SQL 陳述式。

例如,

$sql = $queryBuilder->delete('user', 'status = 0');

此方法將正確地跳脫處理表格和欄位名稱。

public string delete ( $table, $condition, &$params )
public mixed __get ( $name ) string

將從中刪除資料的表格。

$condition array|string

將放在 WHERE 部分的條件。請參閱 yii\db\Query::where() 以了解如何指定條件。

Method Details array

綁定參數將由此方法修改,以便稍後可以綁定到 DB 命令。

__call() public method string

DELETE SQL

__call ( $name, $params )

                public function delete($table, $condition, &$params)
{
    $sql = 'DELETE FROM ' . $this->db->quoteTableName($table);
    $where = $this->buildWhere($condition, $params);
    return $where === '' ? $sql : $sql . ' ' . $where;
}

            
dropCheck() public method (available since version 2.0.13)

建立 SQL 命令,用於刪除檢查約束。

public string dropCheck ( $name, $table )
$typeMap public property string

要刪除的 check 限制條件名稱。名稱將由此方法正確地加上引號。

public mixed __get ( $name ) string

要刪除 check 限制條件的表格。名稱將由此方法正確地加上引號。

__call() public method string

用於刪除 check 限制條件的 SQL 陳述式。

定義於: yii\base\BaseObject::__call() 屬性值

yii\base\UnknownPropertyException

__call ( $name, $params )

                public function dropCheck($name, $table)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by CUBRID.');
}

            
dropColumn() public method

定義於: yii\db\QueryBuilder::dropColumn()

建立 SQL 陳述式,用於刪除資料庫欄位。

public string dropColumn ( $table, $column )
public mixed __get ( $name ) string

要刪除欄位的表格。名稱將由此方法正確地加上引號。

yii\base\InvalidCallException string

要刪除的欄位名稱。名稱將由此方法正確地加上引號。

__call() public method string

用於刪除 DB 欄位的 SQL 陳述式。

__call ( $name, $params )

                public function dropColumn($table, $column)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP COLUMN ' . $this->db->quoteColumnName($column);
}

            
dropCommentFromColumn() public method (available since version 2.0.8)

建立 SQL 命令,用於新增欄位註解。

public string dropCommentFromColumn ( $table, $column )
public mixed __get ( $name ) string

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($object->property).

yii\base\InvalidCallException string

請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 isset($object->property) 時會隱含地被呼叫。

__call() public method string

See also https://php.dev.org.tw/manual/en/function.isset.php.

__call ( $name, $params )

                public function dropCommentFromColumn($table, $column)
{
    return $this->addCommentOnColumn($table, $column, '');
}

            
dropCommentFromTable() public method (available since version 2.0.8)

建立 SQL 命令,用於新增表格註解。

public string dropCommentFromTable ( $table )
public mixed __get ( $name ) string

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($object->property).

__call() public method string

See also https://php.dev.org.tw/manual/en/function.isset.php.

__call ( $name, $params )

                public function dropCommentFromTable($table)
{
    return $this->addCommentOnTable($table, '');
}

            
dropDefaultValue() public method (available since version 2.0.13)

定義於: yii\db\QueryBuilder::dropDefaultValue()

建立 SQL 命令,用於刪除預設值約束。

public string dropDefaultValue ( $name, $table )
$typeMap public property string

要刪除的預設值限制條件名稱。名稱將由此方法正確地加上引號。

public mixed __get ( $name ) string

要刪除預設值限制條件的表格。名稱將由此方法正確地加上引號。

__call() public method string

用於刪除預設值限制條件的 SQL 陳述式。

定義於: yii\base\BaseObject::__call() 屬性值

Defined in: yii\base\BaseObject::__set()

__call ( $name, $params )

                public function dropDefaultValue($name, $table)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support dropping default value constraints.');
}

            
dropForeignKey() public method

定義於: yii\db\QueryBuilder::dropForeignKey()

建立 SQL 陳述式,用於刪除外鍵約束。

public string dropForeignKey ( $name, $table )
$typeMap public property string

要刪除的外鍵限制條件名稱。名稱將由此方法正確地加上引號。

public mixed __get ( $name ) string

要刪除外鍵的表格。名稱將由此方法正確地加上引號。

__call() public method string

用於刪除外鍵限制條件的 SQL 陳述式。

__call ( $name, $params )

                public function dropForeignKey($name, $table)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}

            
dropIndex() public method

建立 SQL 陳述式,用於刪除索引。

另請參閱 https://www.cubrid.org/manual/en/9.3.0/sql/schema/table.html#drop-index-clause

public string dropIndex ( $name, $table )
$typeMap public property string

要刪除的索引名稱。名稱將由此方法正確地加上引號。

public mixed __get ( $name ) string

要刪除索引的表格。名稱將由此方法正確地加上引號。

__call() public method string

用於刪除索引的 SQL 陳述式。

__call ( $name, $params )

                public function dropIndex($name, $table)
{
    /** @var Schema $schema */
    $schema = $this->db->getSchema();
    foreach ($schema->getTableUniques($table) as $unique) {
        if ($unique->name === $name) {
            return $this->dropUnique($name, $table);
        }
    }
    return 'DROP INDEX ' . $this->db->quoteTableName($name) . ' ON ' . $this->db->quoteTableName($table);
}

            
dropPrimaryKey() public method

定義於: yii\db\QueryBuilder::dropPrimaryKey()

建立 SQL 陳述式,用於從現有表格中移除主鍵約束。

public string dropPrimaryKey ( $name, $table )
$typeMap public property string

要移除的主鍵限制條件名稱。

public mixed __get ( $name ) string

將從中移除主鍵限制條件的表格。

__call() public method string

用於從現有表格中移除主鍵限制條件的 SQL 陳述式。

__call ( $name, $params )

                public function dropPrimaryKey($name, $table)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}

            
dropTable() public method

定義於: yii\db\QueryBuilder::dropTable()

建立 SQL 陳述式,用於刪除資料庫表格。

public string dropTable ( $table )
public mixed __get ( $name ) string

要刪除的表格。名稱將由此方法正確地加上引號。

__call() public method string

用於刪除 DB 表格的 SQL 陳述式。

__call ( $name, $params )

                public function dropTable($table)
{
    return 'DROP TABLE ' . $this->db->quoteTableName($table);
}

            
dropUnique() public method (available since version 2.0.13)

定義於: yii\db\QueryBuilder::dropUnique()

建立 SQL 命令,用於刪除唯一約束。

public string dropUnique ( $name, $table )
$typeMap public property string

要刪除的 unique 限制條件名稱。名稱將由此方法正確地加上引號。

public mixed __get ( $name ) string

要刪除 unique 限制條件的表格。名稱將由此方法正確地加上引號。

__call() public method string

用於刪除 unique 限制條件的 SQL 陳述式。

__call ( $name, $params )

                public function dropUnique($name, $table)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}

            
dropView() public method (available since version 2.0.14)

定義於: yii\db\QueryBuilder::dropView()

刪除 SQL 視圖。

public string dropView ( $viewName )
$viewName string

要刪除的視圖名稱。

__call() public method string

DROP VIEW SQL 陳述式。

__call ( $name, $params )

                public function dropView($viewName)
{
    return 'DROP VIEW ' . $this->db->quoteTableName($viewName);
}

            
executeResetSequence() public method (available since version 2.0.16)

定義於: yii\db\QueryBuilder::executeResetSequence()

執行 SQL 陳述式,用於重設表格主鍵的序列值。

執行原因是因為某些資料庫 (Oracle) 需要多個查詢才能執行此操作。序列會被重設,以便下一個插入的新列的主鍵將具有指定的值或現有最大值 +1。

public void executeResetSequence ( $table, $value null )
public mixed __get ( $name ) string

要重設主鍵序列的表格名稱

$config array|string|null

下一個插入的新列的主鍵值。如果未設定,則下一個新列的主鍵將具有現有最大值 +1。

定義於: yii\base\BaseObject::__call() 屬性值

如果底層 DBMS 不支援此功能

__call ( $name, $params )

                public function executeResetSequence($table, $value = null)
{
    $this->db->createCommand()->resetSequence($table, $value)->execute();
}

            
extractAlias() protected method (available since version 2.0.24)

定義於: yii\db\QueryBuilder::extractAlias()

extractAlias()

protected boolean|array extractAlias ( $table )
public mixed __get ( $name )

__call ( $name, $params )

                protected function extractAlias($table)
{
    if (preg_match('/^(.*?)(?i:\s+as|)\s+([^ ]+)$/', $table, $matches)) {
        return $matches;
    }
    return false;
}

            
getColumnType() public method

定義於: yii\db\QueryBuilder::getColumnType()

將抽象欄位類型轉換為實體欄位類型。

轉換是使用 $typeMap 中指定的類型映射完成的。支援以下抽象欄位類型(使用 MySQL 作為範例來說明對應的實體類型)

  • pk:自動遞增主鍵類型,將轉換為 "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY"
  • bigpk:自動遞增主鍵類型,將轉換為 "bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY"
  • upk:無符號自動遞增主鍵類型,將轉換為 "int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY"
  • char:char 類型,將轉換為 "char(1)"
  • string:string 類型,將轉換為 "varchar(255)"
  • text:長字串類型,將轉換為 "text"
  • smallint:小整數類型,將轉換為 "smallint(6)"
  • integer:整數類型,將轉換為 "int(11)"
  • bigint:大整數類型,將轉換為 "bigint(20)"
  • boolean:布林類型,將轉換為 "tinyint(1)"
  • float:浮點數類型,將轉換為 "float"
  • decimal:十進位數類型,將轉換為 "decimal"
  • datetime:datetime 類型,將轉換為 "datetime"
  • timestamp:timestamp 類型,將轉換為 "timestamp"
  • time:time 類型,將轉換為 "time"
  • date:date 類型,將轉換為 "date"
  • money:貨幣類型,將轉換為 "decimal(19,4)"
  • binary:二進位資料類型,將轉換為 "blob"

如果抽象類型包含兩個或多個以空格分隔的部分(例如 "string NOT NULL"),則僅轉換第一部分,其餘部分將附加到轉換結果。例如,'string NOT NULL' 會轉換為 'varchar(255) NOT NULL'。

對於某些抽象類型,您也可以透過在類型後面的圓括號中直接附加長度或精確度限制來指定。例如,string(32) 在 MySQL 資料庫上將轉換為 "varchar(32)"。如果底層 DBMS 不支援類型的這些限制,則會被忽略。

如果在 $typeMap 中找不到類型,則將不進行任何變更直接傳回。

public string getColumnType ( $type )
如果屬性為唯寫 string|yii\db\ColumnSchemaBuilder

抽象欄位類型

__call() public method string

實體欄位類型。

__call ( $name, $params )

                public function getColumnType($type)
{
    if ($type instanceof ColumnSchemaBuilder) {
        $type = $type->__toString();
    }
    if (isset($this->typeMap[$type])) {
        return $this->typeMap[$type];
    } elseif (preg_match('/^(\w+)\((.+?)\)(.*)$/', $type, $matches)) {
        if (isset($this->typeMap[$matches[1]])) {
            return preg_replace('/\(.+\)/', '(' . $matches[2] . ')', $this->typeMap[$matches[1]]) . $matches[3];
        }
    } elseif (preg_match('/^(\w+)\s+/', $type, $matches)) {
        if (isset($this->typeMap[$matches[1]])) {
            return preg_replace('/^\w+/', $this->typeMap[$matches[1]], $type);
        }
    }
    return $type;
}

            
getExpressionBuilder() public method (available since version 2.0.14)

定義於: yii\db\QueryBuilder::getExpressionBuilder()

取得適用於 $expression 的 yii\db\ExpressionBuilderInterface 物件。

使用 $expressionBuilders 陣列來尋找合適的 builder 類別。

另請參閱 $expressionBuilders

public yii\db\ExpressionBuilderInterface getExpressionBuilder ( yii\db\ExpressionInterface $expression )
The property name yii\db\ExpressionInterface
定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

當此 QueryBuilder 不支援 $expression 建構時。

__call ( $name, $params )

                public function getExpressionBuilder(ExpressionInterface $expression)
{
    $className = get_class($expression);
    if (!isset($this->expressionBuilders[$className])) {
        foreach (array_reverse($this->expressionBuilders) as $expressionClass => $builderClass) {
            if (is_subclass_of($expression, $expressionClass)) {
                $this->expressionBuilders[$className] = $builderClass;
                break;
            }
        }
        if (!isset($this->expressionBuilders[$className])) {
            throw new InvalidArgumentException('Expression of class ' . $className . ' can not be built in ' . get_class($this));
        }
    }
    if ($this->expressionBuilders[$className] === __CLASS__) {
        return $this;
    }
    if (!is_object($this->expressionBuilders[$className])) {
        $this->expressionBuilders[$className] = new $this->expressionBuilders[$className]($this);
    }
    return $this->expressionBuilders[$className];
}

            
hasLimit() protected method

Defined in: yii\db\QueryBuilder::hasLimit()

hasLimit()

protected boolean hasLimit ( $limit )
$limit 公開方法

給定的 limit

__call() public method 公開方法

Limit 是否有效

__call ( $name, $params )

                protected function hasLimit($limit)
{
    return ($limit instanceof ExpressionInterface) || ctype_digit((string)$limit);
}

            
hasMethod() public method

Defined in: yii\base\BaseObject::hasMethod()

傳回一個值,指示是否已定義方法。

預設實作是呼叫 php 函數 method_exists()。當您實作 php 魔術方法 __call() 時,您可以覆寫此方法。

public boolean hasMethod ( $name )
$typeMap public property string

public array $typeMap = [
    \
yii\db\cubrid\Schema::TYPE_PK => 'int NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_UPK => 'int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_BIGPK => 'bigint NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_UBIGPK => 'bigint UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\cubrid\Schema::TYPE_CHAR => 'char(1)',
    \
yii\db\cubrid\Schema::TYPE_STRING => 'varchar(255)',
    \
yii\db\cubrid\Schema::TYPE_TEXT => 'varchar',
    \
yii\db\cubrid\Schema::TYPE_TINYINT => 'smallint',
    \
yii\db\cubrid\Schema::TYPE_SMALLINT => 'smallint',
    \
yii\db\cubrid\Schema::TYPE_INTEGER => 'int',
    \
yii\db\cubrid\Schema::TYPE_BIGINT => 'bigint',
    \
yii\db\cubrid\Schema::TYPE_FLOAT => 'float(7)',
    \
yii\db\cubrid\Schema::TYPE_DOUBLE => 'double(15)',
    \
yii\db\cubrid\Schema::TYPE_DECIMAL => 'decimal(10,0)',
    \
yii\db\cubrid\Schema::TYPE_DATETIME => 'datetime',
    \
yii\db\cubrid\Schema::TYPE_TIMESTAMP => 'timestamp',
    \
yii\db\cubrid\Schema::TYPE_TIME => 'time',
    \
yii\db\cubrid\Schema::TYPE_DATE => 'date',
    \
yii\db\cubrid\Schema::TYPE_BINARY => 'blob',
    \
yii\db\cubrid\Schema::TYPE_BOOLEAN => 'smallint',
    \
yii\db\cubrid\Schema::TYPE_MONEY => 'decimal(19,4)',
]

__call() public method 公開方法

方法是否已定義

__call ( $name, $params )

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasOffset() protected method

Defined in: yii\db\QueryBuilder::hasOffset()

hasOffset()

protected boolean hasOffset ( $offset )
$offset 公開方法

給定的 offset

__call() public method 公開方法

Offset 是否有效

__call ( $name, $params )

                protected function hasOffset($offset)
{
    return ($offset instanceof ExpressionInterface) || ctype_digit((string)$offset) && (string)$offset !== '0';
}

            
hasProperty() public method

Defined in: yii\base\BaseObject::hasProperty()

傳回一個值,指示是否已定義屬性。

如果符合以下條件,則屬性已定義:

  • 類別具有與指定名稱相關聯的 getter 或 setter 方法(在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);

另請參閱

public boolean hasProperty ( $name, $checkVars true )
$typeMap public property string

mixed

$checkVars 公開方法

是否將成員變數視為屬性

__call() public method 公開方法

屬性是否已定義

__call ( $name, $params )

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() public method

Defined in: yii\db\QueryBuilder::init()

初始化物件。

在物件使用給定配置初始化後,此方法會在建構函式的結尾被調用。

public void init ( )

__call ( $name, $params )

                public function init()
{
    parent::init();
    $this->expressionBuilders = array_merge($this->defaultExpressionBuilders(), $this->expressionBuilders);
    $this->conditionClasses = array_merge($this->defaultConditionClasses(), $this->conditionClasses);
}

            
insert() public method

Defined in: yii\db\QueryBuilder::insert()

建立 INSERT SQL 陳述式。

例如, `php $sql = $queryBuilder->insert('user', [

'name' => 'Sam',
'age' => 30,

], $params); ` 此方法將正確地 escape 資料表和欄位名稱。

public string insert ( $table, $columns, &$params )
public mixed __get ( $name ) string

新列將被插入的資料表。

public void __set ( $name, $value ) array|yii\db\Query

要插入到資料表中的欄位資料(name => value)或 Query 的實例,以執行 INSERT INTO ... SELECT SQL 陳述式。Query 的傳遞自版本 2.0.11 起可用。

Method Details array

將由此方法產生的綁定參數。它們應在稍後綁定到 DB 命令。

__call() public method string

INSERT SQL

__call ( $name, $params )

                public function insert($table, $columns, &$params)
{
    list($names, $placeholders, $values, $params) = $this->prepareInsertValues($table, $columns, $params);
    return 'INSERT INTO ' . $this->db->quoteTableName($table)
        . (!empty($names) ? ' (' . implode(', ', $names) . ')' : '')
        . (!empty($placeholders) ? ' VALUES (' . implode(', ', $placeholders) . ')' : $values);
}

            
prepareInsertSelectSubQuery() protected method (available since version 2.0.11)

Defined in: yii\db\QueryBuilder::prepareInsertSelectSubQuery()

prepareInsertSelectSubQuery()

protected array prepareInsertSelectSubQuery ( $columns, $schema, $params = [] )
public void __set ( $name, $value ) yii\db\Query

代表 select 查詢的物件。

$schema yii\db\Schema

Schema 物件,用於引用欄位名稱。

Method Details array

要綁定到產生的 SQL 陳述式的參數。這些參數將與查詢建構過程中產生的額外參數一起包含在結果中。

__call() public method array

欄位名稱、值和參數的陣列。

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

如果查詢的 select 不僅包含具名參數。

__call ( $name, $params )

                protected function prepareInsertSelectSubQuery($columns, $schema, $params = [])
{
    if (!is_array($columns->select) || empty($columns->select) || in_array('*', $columns->select)) {
        throw new InvalidArgumentException('Expected select query object with enumerated (named) parameters');
    }
    list($values, $params) = $this->build($columns, $params);
    $names = [];
    $values = ' ' . $values;
    foreach ($columns->select as $title => $field) {
        if (is_string($title)) {
            $names[] = $schema->quoteColumnName($title);
        } elseif (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $field, $matches)) {
            $names[] = $schema->quoteColumnName($matches[2]);
        } else {
            $names[] = $schema->quoteColumnName($field);
        }
    }
    return [$names, $values, $params];
}

            
prepareInsertValues() protected method (available since version 2.0.14)

Defined in: yii\db\QueryBuilder::prepareInsertValues()

prepareInsertValues()

protected array prepareInsertValues ( $table, $columns, $params = [] )
public mixed __get ( $name ) string

新列將被插入的資料表。

public void __set ( $name, $value ) array|yii\db\Query

要插入到資料表中的欄位資料(name => value)或 Query 的實例,以執行 INSERT INTO ... SELECT SQL 陳述式。

Method Details array

將由此方法產生的綁定參數。它們應在稍後綁定到 DB 命令。

__call() public method array

欄位名稱、佔位符、值和參數的陣列。

__call ( $name, $params )

                protected function prepareInsertValues($table, $columns, $params = [])
{
    $schema = $this->db->getSchema();
    $tableSchema = $schema->getTableSchema($table);
    $columnSchemas = $tableSchema !== null ? $tableSchema->columns : [];
    $names = [];
    $placeholders = [];
    $values = ' DEFAULT VALUES';
    if ($columns instanceof Query) {
        list($names, $values, $params) = $this->prepareInsertSelectSubQuery($columns, $schema, $params);
    } else {
        foreach ($columns as $name => $value) {
            $names[] = $schema->quoteColumnName($name);
            $value = isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
            if ($value instanceof ExpressionInterface) {
                $placeholders[] = $this->buildExpression($value, $params);
            } elseif ($value instanceof \yii\db\Query) {
                list($sql, $params) = $this->build($value, $params);
                $placeholders[] = "($sql)";
            } else {
                $placeholders[] = $this->bindParam($value, $params);
            }
        }
    }
    return [$names, $placeholders, $values, $params];
}

            
prepareUpdateSets() protected method (available since version 2.0.14)

Defined in: yii\db\QueryBuilder::prepareUpdateSets()

prepareUpdateSets()

protected array prepareUpdateSets ( $table, $columns, $params = [] )
public mixed __get ( $name ) string

要更新的資料表。

public void __set ( $name, $value ) array

要更新的欄位資料(name => value)。

Method Details array

綁定參數將由此方法修改,以便稍後可以綁定到 DB 命令。

__call() public method array

用於 UPDATE SQL 陳述式的 SET 部分的陣列(第一個陣列元素)和參數(第二個陣列元素)。

__call ( $name, $params )

                protected function prepareUpdateSets($table, $columns, $params = [])
{
    $tableSchema = $this->db->getTableSchema($table);
    $columnSchemas = $tableSchema !== null ? $tableSchema->columns : [];
    $sets = [];
    foreach ($columns as $name => $value) {
        $value = isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
        if ($value instanceof ExpressionInterface) {
            $placeholder = $this->buildExpression($value, $params);
        } else {
            $placeholder = $this->bindParam($value, $params);
        }
        $sets[] = $this->db->quoteColumnName($name) . '=' . $placeholder;
    }
    return [$sets, $params];
}

            
prepareUpsertColumns() protected method (available since version 2.0.14)
protected array prepareUpsertColumns ( $table, $insertColumns, $updateColumns, &$constraints = [] )
public mixed __get ( $name ) string
$insertColumns array|yii\db\Query
$updateColumns array|boolean
$constraints yii\db\Constraint[]

此參數接收一個匹配的約束列表。這些約束將依其欄位名稱為唯一。

__call ( $name, $params )

                protected function prepareUpsertColumns($table, $insertColumns, $updateColumns, &$constraints = [])
{
    if ($insertColumns instanceof Query) {
        list($insertNames) = $this->prepareInsertSelectSubQuery($insertColumns, $this->db->getSchema());
    } else {
        $insertNames = array_map([$this->db, 'quoteColumnName'], array_keys($insertColumns));
    }
    $uniqueNames = $this->getTableUniqueColumnNames($table, $insertNames, $constraints);
    $uniqueNames = array_map([$this->db, 'quoteColumnName'], $uniqueNames);
    if ($updateColumns !== true) {
        return [$uniqueNames, $insertNames, null];
    }
    return [$uniqueNames, $insertNames, array_diff($insertNames, $uniqueNames)];
}

            
renameColumn() public method

Defined in: yii\db\QueryBuilder::renameColumn()

建立 SQL 陳述式,用於重新命名欄位。

public string renameColumn ( $table, $oldName, $newName )
public mixed __get ( $name ) string

要重新命名的欄位所在的資料表。名稱將由此方法正確地引用。

$oldName string

欄位的舊名稱。名稱將由此方法正確地引用。

$newName string

欄位的新名稱。名稱將由此方法正確地引用。

__call() public method string

用於重新命名 DB 欄位的 SQL 陳述式。

__call ( $name, $params )

                public function renameColumn($table, $oldName, $newName)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' RENAME COLUMN ' . $this->db->quoteColumnName($oldName)
        . ' TO ' . $this->db->quoteColumnName($newName);
}

            
renameTable() public method

Defined in: yii\db\QueryBuilder::renameTable()

建立 SQL 陳述式,用於重新命名資料庫表格。

public string renameTable ( $oldName, $newName )
$oldName string

要重新命名的資料表。名稱將由此方法正確地引用。

$newName string

資料表的新名稱。名稱將由此方法正確地引用。

__call() public method string

用於重新命名 DB 資料表的 SQL 陳述式。

__call ( $name, $params )

                public function renameTable($oldName, $newName)
{
    return 'RENAME TABLE ' . $this->db->quoteTableName($oldName) . ' TO ' . $this->db->quoteTableName($newName);
}

            
resetSequence() public method

建立 SQL 陳述式,用於重設表格主鍵的序列值。

序列將被重置,以便下一個插入的新列的主鍵將具有指定的值或 1。

public string resetSequence ( $tableName, $value null )
$tableName string

要重置主鍵序列的資料表名稱

$config 公開方法

下一個插入的新列的主鍵值。如果未設定,則下一個新列的主鍵將具有值 1。

__call() public method string

用於重置序列的 SQL 陳述式

定義於: yii\base\BaseObject::__call() yii\base\InvalidArgumentException

如果資料表不存在或沒有與資料表關聯的序列。

__call ( $name, $params )

                public function resetSequence($tableName, $value = null)
{
    $table = $this->db->getTableSchema($tableName);
    if ($table !== null && $table->sequenceName !== null) {
        $tableName = $this->db->quoteTableName($tableName);
        if ($value === null) {
            $key = reset($table->primaryKey);
            $value = (int) $this->db->createCommand("SELECT MAX(`$key`) FROM " . $this->db->schema->quoteTableName($tableName))->queryScalar() + 1;
        } else {
            $value = (int) $value;
        }
        return 'ALTER TABLE ' . $this->db->schema->quoteTableName($tableName) . " AUTO_INCREMENT=$value;";
    } elseif ($table === null) {
        throw new InvalidArgumentException("Table not found: $tableName");
    }
    throw new InvalidArgumentException("There is not sequence associated with table '$tableName'.");
}

            
selectExists() public method (available since version 2.0.8)

建立 SELECT EXISTS() SQL 陳述式。

public string selectExists ( $rawSql )
$rawSql string

原始格式的子查詢,用於從中選擇。

__call() public method string

SELECT EXISTS() SQL 陳述式。

__call ( $name, $params )

                public function selectExists($rawSql)
{
    return 'SELECT CASE WHEN EXISTS(' . $rawSql . ') THEN 1 ELSE 0 END';
}

            
setConditionClasses() public method (available since version 2.0.14.2)

Defined in: yii\db\QueryBuilder::setConditionClasses()

設定 $conditionClasses 屬性的 Setter。

另請參閱 $conditionClasses

public void setConditionClasses ( $classes )
$classes string[]

條件別名到條件類別的映射。例如

['LIKE' => yii\db\condition\LikeCondition::class]

__call ( $name, $params )

                public function setConditionClasses($classes)
{
    $this->conditionClasses = array_merge($this->conditionClasses, $classes);
}

            
setExpressionBuilders() public method (available since version 2.0.14)

Defined in: yii\db\QueryBuilder::setExpressionBuilders()

設定 $expressionBuilders 屬性的 Setter。

另請參閱 $expressionBuilders

public void setExpressionBuilders ( $builders )
$builders string[]

應該與 $expressionBuilders 屬性中預定義的建構器合併的建構器陣列。

__call ( $name, $params )

                public function setExpressionBuilders($builders)
{
    $this->expressionBuilders = array_merge($this->expressionBuilders, $builders);
}

            
truncateTable() public method

Defined in: yii\db\QueryBuilder::truncateTable()

建立 SQL 陳述式,用於截斷資料庫表格。

public string truncateTable ( $table )
public mixed __get ( $name ) string

要截斷的資料表。名稱將由此方法正確地引用。

__call() public method string

用於截斷 DB 資料表的 SQL 陳述式。

__call ( $name, $params )

                public function truncateTable($table)
{
    return 'TRUNCATE TABLE ' . $this->db->quoteTableName($table);
}

            
update() public method

Defined in: yii\db\QueryBuilder::update()

建立 UPDATE SQL 陳述式。

例如,

$params = [];
$sql = $queryBuilder->update('user', ['status' => 1], 'age > 30', $params);

此方法將正確地跳脫處理表格和欄位名稱。

public string update ( $table, $columns, $condition, &$params )
public mixed __get ( $name ) string

要更新的資料表。

public void __set ( $name, $value ) array

要更新的欄位資料(name => value)。

$condition array|string

將放在 WHERE 部分的條件。請參閱 yii\db\Query::where() 以了解如何指定條件。

Method Details array

綁定參數將由此方法修改,以便稍後可以綁定到 DB 命令。

__call() public method string

UPDATE SQL

__call ( $name, $params )

                public function update($table, $columns, $condition, &$params)
{
    list($lines, $params) = $this->prepareUpdateSets($table, $columns, $params);
    $sql = 'UPDATE ' . $this->db->quoteTableName($table) . ' SET ' . implode(', ', $lines);
    $where = $this->buildWhere($condition, $params);
    return $where === '' ? $sql : $sql . ' ' . $where;
}

            
upsert() public method (available since version 2.0.14)

建立 SQL 陳述式,用於在資料庫表格中插入資料列(如果它們尚不存在,符合唯一約束),如果存在則更新它們。

例如,

$sql = $queryBuilder->upsert('pages', [
    'name' => 'Front page',
    'url' => 'https://example.com/', // url is unique
    'visits' => 0,
], [
    'visits' => new \yii\db\Expression('visits + 1'),
], $params);

此方法將正確地跳脫處理表格和欄位名稱。

另請參閱 https://www.cubrid.org/manual/en/9.3.0/sql/query/merge.html

public string upsert ( $table, $insertColumns, $updateColumns, &$params )
public mixed __get ( $name ) string

新列將被插入/更新的資料表。

$insertColumns array|yii\db\Query

要插入到資料表中的欄位資料(name => value)或 yii\db\Query 的實例,以執行 INSERT INTO ... SELECT SQL 陳述式。

$updateColumns array|boolean

如果欄位資料已存在,則要更新的欄位資料(name => value)。如果傳遞 true,則欄位資料將更新為與插入欄位資料匹配。如果傳遞 false,如果欄位資料已存在,則不會執行任何更新。

Method Details array

將由此方法產生的綁定參數。它們應在稍後綁定到 DB 命令。

__call() public method string

產生的 SQL。

定義於: yii\base\BaseObject::__call() 屬性值

Defined in: yii\base\BaseObject::__set()

__call ( $name, $params )

                public function upsert($table, $insertColumns, $updateColumns, &$params)
{
    /** @var Constraint[] $constraints */
    list($uniqueNames, $insertNames, $updateNames) = $this->prepareUpsertColumns($table, $insertColumns, $updateColumns, $constraints);
    if (empty($uniqueNames)) {
        return $this->insert($table, $insertColumns, $params);
    }
    if ($updateNames === []) {
        // there are no columns to update
        $updateColumns = false;
    }
    $onCondition = ['or'];
    $quotedTableName = $this->db->quoteTableName($table);
    foreach ($constraints as $constraint) {
        $constraintCondition = ['and'];
        foreach ($constraint->columnNames as $name) {
            $quotedName = $this->db->quoteColumnName($name);
            $constraintCondition[] = "$quotedTableName.$quotedName=\"EXCLUDED\".$quotedName";
        }
        $onCondition[] = $constraintCondition;
    }
    $on = $this->buildCondition($onCondition, $params);
    list(, $placeholders, $values, $params) = $this->prepareInsertValues($table, $insertColumns, $params);
    $mergeSql = 'MERGE INTO ' . $this->db->quoteTableName($table) . ' '
        . 'USING (' . (!empty($placeholders) ? 'VALUES (' . implode(', ', $placeholders) . ')' : ltrim($values, ' ')) . ') AS "EXCLUDED" (' . implode(', ', $insertNames) . ') '
        . "ON ($on)";
    $insertValues = [];
    foreach ($insertNames as $name) {
        $quotedName = $this->db->quoteColumnName($name);
        if (strrpos($quotedName, '.') === false) {
            $quotedName = '"EXCLUDED".' . $quotedName;
        }
        $insertValues[] = $quotedName;
    }
    $insertSql = 'INSERT (' . implode(', ', $insertNames) . ')'
        . ' VALUES (' . implode(', ', $insertValues) . ')';
    if ($updateColumns === false) {
        return "$mergeSql WHEN NOT MATCHED THEN $insertSql";
    }
    if ($updateColumns === true) {
        $updateColumns = [];
        foreach ($updateNames as $name) {
            $quotedName = $this->db->quoteColumnName($name);
            if (strrpos($quotedName, '.') === false) {
                $quotedName = '"EXCLUDED".' . $quotedName;
            }
            $updateColumns[$name] = new Expression($quotedName);
        }
    }
    list($updates, $params) = $this->prepareUpdateSets($table, $updateColumns, $params);
    $updateSql = 'UPDATE SET ' . implode(', ', $updates);
    return "$mergeSql WHEN MATCHED THEN $updateSql WHEN NOT MATCHED THEN $insertSql";
}