0 追蹤者

類別 yii\db\sqlite\QueryBuilder

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

QueryBuilder 是 SQLite 資料庫的查詢建構器。

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$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\sqlite\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\sqlite\QueryBuilder
addColumn() 建立 SQL 陳述式以新增新的資料庫資料行。 yii\db\QueryBuilder
addCommentOnColumn() 建立 SQL 命令以新增資料行註解。 yii\db\sqlite\QueryBuilder
addCommentOnTable() 建立 SQL 命令以新增表格註解。 yii\db\sqlite\QueryBuilder
addDefaultValue() 建立 SQL 命令以將預設值約束新增至現有表格。 yii\db\sqlite\QueryBuilder
addForeignKey() 建立 SQL 陳述式以將外鍵約束新增至現有表格。 yii\db\sqlite\QueryBuilder
addPrimaryKey() 建立 SQL 陳述式以將主鍵約束新增至現有表格。 yii\db\sqlite\QueryBuilder
addUnique() 建立 SQL 命令以將唯一約束新增至現有表格。 yii\db\sqlite\QueryBuilder
alterColumn() 建立 SQL 陳述式以變更資料行的定義。 yii\db\sqlite\QueryBuilder
batchInsert() 產生批次 INSERT SQL 陳述式。 yii\db\sqlite\QueryBuilder
bindParam() 協助程式方法,使用 PARAM_PREFIX 將 $value 新增至 $params 陣列。 yii\db\QueryBuilder
build() yii\db\Query 物件產生 SELECT SQL 陳述式。 yii\db\sqlite\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\sqlite\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\sqlite\QueryBuilder
buildWhere() yii\db\QueryBuilder
buildWithQueries() yii\db\QueryBuilder
canGetProperty() 傳回值,指示是否可以讀取屬性。 yii\base\BaseObject
canSetProperty() 傳回值,指示是否可以設定屬性。 yii\base\BaseObject
checkIntegrity() 啟用或停用完整性檢查。 yii\db\sqlite\QueryBuilder
className() 傳回此類別的完整限定名稱。 yii\base\BaseObject
createConditionFromArray() 根據 $conditionClasses 映射,將以陣列格式定義的 $condition(如 yii\db\Query::where() 中所述)轉換為 yii\db\condition\ConditionInterface 的實例。 yii\db\QueryBuilder
createIndex() 建立用於建立新索引的 SQL 語句。 yii\db\sqlite\QueryBuilder
createTable() 建立用於建立新資料庫表格的 SQL 語句。 yii\db\QueryBuilder
createView() 建立 SQL 視圖。 yii\db\QueryBuilder
delete() 建立 DELETE SQL 語句。 yii\db\QueryBuilder
dropCheck() 建立用於刪除檢查約束的 SQL 命令。 yii\db\sqlite\QueryBuilder
dropColumn() 建立用於刪除資料庫欄位的 SQL 語句。 yii\db\sqlite\QueryBuilder
dropCommentFromColumn() 建立 SQL 命令以新增資料行註解。 yii\db\sqlite\QueryBuilder
dropCommentFromTable() 建立 SQL 命令以新增表格註解。 yii\db\sqlite\QueryBuilder
dropDefaultValue() 建立用於刪除預設值約束的 SQL 命令。 yii\db\sqlite\QueryBuilder
dropForeignKey() 建立用於刪除外鍵約束的 SQL 語句。 yii\db\sqlite\QueryBuilder
dropIndex() 建立用於刪除索引的 SQL 語句。 yii\db\sqlite\QueryBuilder
dropPrimaryKey() 建立用於移除現有表格主鍵約束的 SQL 語句。 yii\db\sqlite\QueryBuilder
dropTable() 建立用於刪除資料庫表格的 SQL 語句。 yii\db\QueryBuilder
dropUnique() 建立用於刪除唯一性約束的 SQL 命令。 yii\db\sqlite\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\sqlite\QueryBuilder
renameTable() 建立用於重新命名資料庫表格的 SQL 語句。 yii\db\sqlite\QueryBuilder
resetSequence() 建立用於重設表格主鍵序列值的 SQL 語句。 yii\db\sqlite\QueryBuilder
selectExists() 建立 SELECT EXISTS() SQL 語句。 yii\db\QueryBuilder
setConditionClasses() $conditionClasses 屬性的 Setter。 yii\db\QueryBuilder
setExpressionBuilders() $expressionBuilders 屬性的 Setter。 yii\db\QueryBuilder
truncateTable() 建立用於截斷資料庫表格的 SQL 語句。 yii\db\sqlite\QueryBuilder
update() 建立 UPDATE SQL 語句。 yii\db\QueryBuilder
upsert() 建立 SQL 語句,用於在資料庫表格中插入列(如果它們尚不存在,符合唯一性約束),或者如果它們存在則更新它們。 yii\db\sqlite\QueryBuilder

受保護的方法

隱藏繼承的方法

方法 描述 定義於
defaultConditionClasses() 包含預設條件類別的陣列。如果您想更改查詢建構器的預設條件類別,請擴展此方法。 有關詳細信息,請參閱 $conditionClasses 文檔。 yii\db\QueryBuilder
defaultExpressionBuilders() 包含預設表達式建構器的陣列。如果您想更改此查詢建構器的預設表達式建構器,請擴展並覆蓋此方法。 有關詳細信息,請參閱 $expressionBuilders 文檔。 yii\db\sqlite\QueryBuilder
extractAlias() 如果存在表格別名,則提取表格別名;否則返回 false。 yii\db\QueryBuilder
hasLimit() 檢查給定的限制是否有效。 yii\db\QueryBuilder
hasOffset() 檢查給定的偏移量是否有效。 yii\db\QueryBuilder
prepareInsertSelectSubQuery() 為 INSERT INTO ... SELECT SQL 語句準備 select-subquery 和欄位名稱。 yii\db\QueryBuilder
prepareInsertValues() INSERT SQL 語句準備 VALUES 部分。 yii\db\QueryBuilder
prepareUpdateSets() UPDATE SQL 語句準備 SET 部分。 yii\db\QueryBuilder
prepareUpsertColumns() yii\db\QueryBuilder

常數

隱藏繼承的常數

常數 描述 定義於
PARAM_PREFIX ':qp' 自動產生查詢綁定參數的前綴。 yii\db\QueryBuilder

屬性詳細資訊

隱藏繼承的屬性

$typeMap public property

從抽象資料行類型 (鍵) 到物理資料行類型 (值) 的映射。

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

方法詳細資訊

隱藏繼承的方法

__call() public method

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

呼叫指定的非類別方法。

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

public mixed __call ( $name, $params )
$name string

方法名稱

$params array

方法參數

傳回 mixed

方法傳回值

拋出 yii\base\UnknownMethodException

當調用未知方法時

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

            
__construct() public method

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

建構子。

public void __construct ( $connection, $config = [] )
$connection yii\db\Connection

資料庫連線。

$config array

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

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

            
__get() public method

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

傳回物件屬性的值。

請勿直接調用此方法,因為它是 PHP 魔術方法,將在執行 $value = $object->property; 時被隱式調用。

另請參閱 __set()

public mixed __get ( $name )
$name string

屬性名稱

傳回 mixed

屬性值

拋出 yii\base\UnknownPropertyException

如果未定義屬性

拋出 yii\base\InvalidCallException

如果屬性為唯寫

                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);
}

            
__isset() public method

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

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

請勿直接調用此方法,因為它是 PHP 魔術方法,將在執行 isset($object->property) 時被隱式調用。

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

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

public boolean __isset ( $name )
$name string

屬性名稱或事件名稱

傳回 boolean

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

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

            
__set() public method

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

設定物件屬性的值。

請勿直接調用此方法,因為它是 PHP 魔術方法,將在執行 $object->property = $value; 時被隱式調用。

另請參閱 __get()

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

屬性名稱或事件名稱

$value mixed

屬性值

拋出 yii\base\UnknownPropertyException

如果未定義屬性

拋出 yii\base\InvalidCallException

如果屬性為唯讀

                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);
    }
}

            
__unset() public method

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

將物件屬性設定為 null。

請勿直接調用此方法,因為它是 PHP 魔術方法,將在執行 unset($object->property) 時被隱式調用。

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

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

public void __unset ( $name )
$name string

屬性名稱

拋出 yii\base\InvalidCallException

如果屬性為唯讀。

                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);
    }
}

            
addCheck() public method (available since version 2.0.13)

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

public string addCheck ( $name, $table, $expression )
$name string

檢查約束的名稱。名稱將由方法正確引用。

$table string

將在其中添加檢查約束的表格。名稱將由方法正確引用。

$expression string

CHECK 約束的 SQL。

傳回 string

用於將檢查約束添加到現有表格的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能。

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

            
addColumn() public method

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

建立 SQL 陳述式以新增新的資料庫資料行。

public string addColumn ( $table, $column, $type )
$table string

將在其中添加新欄位的表格。表格名稱將由方法正確引用。

$column string

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

$type string

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

傳回 string

用於添加新欄位的 SQL 語句。

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

            
addCommentOnColumn() public method (available since version 2.0.8)

建立 SQL 命令以新增資料行註解。

public string addCommentOnColumn ( $table, $column, $comment )
$table string

要註解其欄位的表格。表格名稱將由方法正確引用。

$column string

要註解的欄位名稱。欄位名稱將由方法正確引用。

$comment string

要添加的註解文字。註解將由方法正確引用。

傳回 string

用於在欄位上添加註解的 SQL 語句

拋出 yii\base\NotSupportedException

                public function addCommentOnColumn($table, $column, $comment)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
addCommentOnTable() public method (available since version 2.0.8)

建立 SQL 命令以新增表格註解。

public string addCommentOnTable ( $table, $comment )
$table string

要註解其欄位的表格。表格名稱將由方法正確引用。

$comment string

要添加的註解文字。註解將由方法正確引用。

傳回 string

用於在表格上添加註解的 SQL 語句

拋出 yii\base\NotSupportedException

                public function addCommentOnTable($table, $comment)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
addDefaultValue() public method (available since version 2.0.13)

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

public string addDefaultValue ( $name, $table, $column, $value )
$name string

預設值約束的名稱。名稱將由方法正確引用。

$table string

將在其中添加預設值約束的表格。名稱將由方法正確引用。

$column string

將在其上添加約束的欄位名稱。名稱將由方法正確引用。

$value mixed

預設值。

傳回 string

用於將預設值約束添加到現有表格的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能。

                public function addDefaultValue($name, $table, $column, $value)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
addForeignKey() public method

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

此方法將正確引用表格和欄位名稱。

public string addForeignKey ( $name, $table, $columns, $refTable, $refColumns, $delete null, $update null )
$name string

外鍵約束的名稱。

$table string

將在其中添加外鍵約束的表格。

$columns string|array

將在其上添加約束的欄位名稱。如果有多个欄位,請用逗號分隔它們或使用陣列來表示它們。

$refTable string

外鍵參考的表格。

$refColumns string|array

外鍵參考的欄位名稱。如果有多个欄位,請用逗號分隔它們或使用陣列來表示它們。

$delete string|null

ON DELETE 選項。大多數 DBMS 支持以下選項:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL

$update string|null

ON UPDATE 選項。大多數 DBMS 支持以下選項:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL

傳回 string

用於將外鍵約束添加到現有表格的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

                public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
addPrimaryKey() public method

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

public string addPrimaryKey ( $name, $table, $columns )
$name string

主鍵約束的名稱。

$table string

將在其中添加主鍵約束的表格。

$columns string|array

主鍵將包含的以逗號分隔的字串或欄位陣列。

傳回 string

用於將主鍵約束添加到現有表格的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

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

            
addUnique() 公開方法 (自 2.0.13 版本起可用)

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

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

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

$table string

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

$columns string|array

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

傳回 string

用於將唯一約束新增到現有資料表的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能。

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

            
alterColumn() 公開方法

建立 SQL 陳述式以變更資料行的定義。

public string alterColumn ( $table, $column, $type )
$table string

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

$column string

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

$type string

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

傳回 string

用於變更欄位定義的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

                public function alterColumn($table, $column, $type)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
batchInsert() 公開方法

產生批次 INSERT SQL 陳述式。

例如,

$connection->createCommand()->batchInsert('user', ['name', 'age'], [
    ['Tom', 30],
    ['Jane', 20],
    ['Linda', 25],
])->execute();

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

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

將在其中插入新列的資料表。

$columns array

欄位名稱

$rows array|Generator

要批次插入到資料表中的列

$params
傳回 string

批次 INSERT SQL 語句

                public function batchInsert($table, $columns, $rows, &$params = [])
{
    if (empty($rows)) {
        return '';
    }
    // SQLite supports batch insert natively since 3.7.11
    // https://www.sqlite.org/releaselog/3_7_11.html
    $this->db->open(); // ensure pdo is not null
    if (version_compare($this->db->getServerVersion(), '3.7.11', '>=')) {
        return parent::batchInsert($table, $columns, $rows, $params);
    }
    $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($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) . ') SELECT ' . implode(' UNION SELECT ', $values);
}

            
bindParam() 公開方法 (自 2.0.14 版本起可用)

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

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

public string bindParam ( $value, &$params )
$value string|null
$params array

以參考方式傳遞

傳回 string

$params 陣列中的佔位符名稱

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

            
build() 公開方法

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

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

將從其產生 SQL 語句的 yii\db\Query 物件。

$params array

要繫結到產生的 SQL 語句的參數。 這些參數將與查詢建構過程中產生的額外參數一起包含在結果中。

傳回 array

產生的 SQL 語句(第一個陣列元素)和要繫結到 SQL 語句的對應參數(第二個陣列元素)。 返回的參數包括 $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() 公開方法
自 2.0.14 版本起已棄用。 請改用 buildCondition()

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

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

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

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

$operands array

要連接的 SQL 表達式。

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

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

            
buildBetweenCondition() 公開方法
自 2.0.14 版本起已棄用。 請改用 buildCondition()

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

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

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

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

$operands array

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

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildColumns() 公開方法

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

處理資料行並在必要時正確地加上引號。

它將把所有欄位連接成一個字串,並以逗號作為分隔符。

public string buildColumns ( $columns )
$columns string|array

要處理的欄位

傳回 string

處理結果

                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() 公開方法

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

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

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

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

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

                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() 公開方法
自 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 物件。

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildExpression() 公開方法 (自 2.0.14 版本起可用)
public string buildExpression ( yii\db\ExpressionInterface $expression, &$params = [] )
$expression yii\db\ExpressionInterface

要建構的表達式

$params array

要繫結到產生的 SQL 語句的參數。 這些參數將與表達式建構過程中產生的額外參數一起包含在結果中。

傳回 string

在傳遞到 DBMS 之前,既不會被加上引號也不會被編碼的 SQL 語句

拋出 yii\base\InvalidArgumentException

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

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

            
buildFrom() 公開方法
public string buildFrom ( $tables, &$params )
$tables array
$params array

要填充的繫結參數

傳回 string

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

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

            
buildGroupBy() 公開方法
public string buildGroupBy ( $columns )
$columns array
傳回 string

GROUP BY 子句

                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() 公開方法
自 2.0.14 版本起已棄用。 請改用 buildCondition()

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

根據資料行-值組建立條件。

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

條件規格。

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

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

            
buildHaving() 公開方法
public string buildHaving ( $condition, &$params )
$condition string|array
$params array

要填充的繫結參數

傳回 string

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

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

            
buildInCondition() 公開方法
自 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,則為空。

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

拋出 yii\db\Exception

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

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

            
buildJoin() 公開方法
public string buildJoin ( $joins, &$params )
$joins array
$params array

要填充的繫結參數

傳回 string

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

拋出 yii\db\Exception

如果 $joins 參數格式不正確

                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() 公開方法
自 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 或空陣列來表示值已經跳脫,並且不應套用任何跳脫。 請注意,當使用跳脫對應時(或未提供第三個運算元時),值將會自動括在一對百分比字元內。
$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildLimit() 公開方法

public string buildLimit ( $limit, $offset )
$limit integer
$offset integer
傳回 string

LIMIT 和 OFFSET 子句

                public function buildLimit($limit, $offset)
{
    $sql = '';
    if ($this->hasLimit($limit)) {
        $sql = 'LIMIT ' . $limit;
        if ($this->hasOffset($offset)) {
            $sql .= ' OFFSET ' . $offset;
        }
    } elseif ($this->hasOffset($offset)) {
        // limit is not optional in SQLite
        // https://www.sqlite.org/syntaxdiagrams.html#select-stmt
        $sql = "LIMIT 9223372036854775807 OFFSET $offset"; // 2^63-1
    }
    return $sql;
}

            
buildNotCondition() 公開方法
自 2.0.14 版本起已棄用。 請改用 buildCondition()

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

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

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

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

$operands array

要連接的 SQL 表達式。

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildOrderBy() 公開方法
public string buildOrderBy ( $columns )
$columns array
傳回 string

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

                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() 公開方法

定義於: 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()

傳回 string

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

                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 string buildSelect ( $columns, &$params, $distinct false, $selectOption null )
$columns array
$params array

要填充的繫結參數

$distinct boolean
$selectOption string|null
傳回 string

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

                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() 公開方法
自 2.0.14 版本起已棄用。 請改用 buildCondition()

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

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

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

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

$operands array

包含兩個欄位名稱。

$params array

要填充的繫結參數

傳回 string

產生的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildUnion() 公開方法

public string buildUnion ( $unions, &$params )
$unions array
$params array

要填充的繫結參數

傳回 string

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

                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 string buildWhere ( $condition, &$params )
$condition string|array
$params array

要填充的繫結參數

傳回 string

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

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

            
buildWithQueries() 公開方法 (自 2.0.35 版本起可用)
public string buildWithQueries ( $withs, &$params )
$withs array

每個 WITH 查詢的組態

$params array

要填充的繫結參數

傳回 string

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

                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() 公開方法

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

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

如果屬性符合以下條件,則為可讀:

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

另請參閱 canSetProperty()

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

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

傳回 boolean

屬性是否可讀

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

            
canSetProperty() 公開方法

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

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

如果屬性符合以下條件,則為可寫:

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

另請參閱 canGetProperty()

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

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

傳回 boolean

是否可以寫入屬性

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

            
checkIntegrity() public method

啟用或停用完整性檢查。

public string checkIntegrity ( $check true, $schema '', $table '' )
$check boolean

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

$schema string

表格的 schema。對於 SQLite 而言無意義。

$table string

表格名稱。對於 SQLite 而言無意義。

傳回 string

用於檢查完整性的 SQL 語句

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

                public function checkIntegrity($check = true, $schema = '', $table = '')
{
    return 'PRAGMA foreign_keys=' . (int) $check;
}

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

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

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

public static string className ( )
傳回 string

此類別的完整限定名稱。

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

            
createConditionFromArray() public method (自 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 string|array

                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

建立用於建立新索引的 SQL 語句。

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

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

$table string

將於其上建立新索引的表格。表格名稱將會被此方法正確地加上引號。

$columns string|array

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

$unique boolean

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

傳回 string

用於建立新索引的 SQL 語句。

                public function createIndex($name, $table, $columns, $unique = false)
{
    $tableParts = explode('.', $table);
    $schema = null;
    if (count($tableParts) === 2) {
        list ($schema, $table) = $tableParts;
    }
    return ($unique ? 'CREATE UNIQUE INDEX ' : 'CREATE INDEX ')
        . $this->db->quoteTableName(($schema ? $schema . '.' : '') . $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 )
$table string

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

$columns array

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

$options string|null

將附加到產生的 SQL 的額外 SQL 片段。

傳回 string

用於建立新 DB 表格的 SQL 語句。

                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 (自 2.0.14 版本起可用)

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

建立 SQL 視圖。

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

要建立的視圖名稱。

$subQuery string|yii\db\Query

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

傳回 string

CREATE VIEW SQL 語句。

                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 (自 2.0.14 版本起可用)

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

包含預設條件類別的陣列。如果您想更改查詢建構器的預設條件類別,請擴展此方法。 有關詳細信息,請參閱 $conditionClasses 文檔。

另請參閱 $conditionClasses

protected array defaultConditionClasses ( )

                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 (自 2.0.14 版本起可用)

包含預設表達式建構器的陣列。如果您想更改此查詢建構器的預設表達式建構器,請擴展並覆蓋此方法。 有關詳細信息,請參閱 $expressionBuilders 文檔。

protected array defaultExpressionBuilders ( )

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

            
delete() public method

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

建立 DELETE SQL 語句。

例如,

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

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

public string delete ( $table, $condition, &$params )
$table string

將從中刪除資料的表格。

$condition array|string

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

$params array

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

傳回 string

DELETE SQL

                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 (自 2.0.13 版本起可用)

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

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

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

$table string

要刪除其 check 限制的表格。名稱將會被此方法正確地加上引號。

傳回 string

用於刪除 check 限制的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能。

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

            
dropColumn() public method

建立用於刪除資料庫欄位的 SQL 語句。

public string dropColumn ( $table, $column )
$table string

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

$column string

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

傳回 string

用於刪除 DB 欄位的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

                public function dropColumn($table, $column)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
dropCommentFromColumn() public method (自 2.0.8 版本起可用)

建立 SQL 命令以新增資料行註解。

public string dropCommentFromColumn ( $table, $column )
$table string

要註解其欄位的表格。表格名稱將由方法正確引用。

$column string

要註解的欄位名稱。欄位名稱將由方法正確引用。

傳回 string

用於在欄位上添加註解的 SQL 語句

拋出 yii\base\NotSupportedException

                public function dropCommentFromColumn($table, $column)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
dropCommentFromTable() public method (自 2.0.8 版本起可用)

建立 SQL 命令以新增表格註解。

public string dropCommentFromTable ( $table )
$table string

要註解其欄位的表格。表格名稱將由方法正確引用。

傳回 string

用於在欄位上添加註解的 SQL 語句

拋出 yii\base\NotSupportedException

                public function dropCommentFromTable($table)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

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

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

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

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

$table string

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

傳回 string

用於刪除預設值限制的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能。

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

            
dropForeignKey() public method

建立用於刪除外鍵約束的 SQL 語句。

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

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

$table string

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

傳回 string

用於刪除外鍵限制的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

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

            
dropIndex() public method

建立用於刪除索引的 SQL 語句。

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

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

$table string

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

傳回 string

用於刪除索引的 SQL 語句。

                public function dropIndex($name, $table)
{
    return 'DROP INDEX ' . $this->db->quoteTableName($name);
}

            
dropPrimaryKey() public method

建立用於移除現有表格主鍵約束的 SQL 語句。

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

要移除的主鍵限制名稱。

$table string

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

傳回 string

用於從現有表格中移除主鍵限制的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

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

            
dropTable() public method

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

建立用於刪除資料庫表格的 SQL 語句。

public string dropTable ( $table )
$table string

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

傳回 string

用於刪除 DB 表格的 SQL 語句。

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

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

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

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

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

$table string

要刪除其 unique 限制的表格。名稱將會被此方法正確地加上引號。

傳回 string

用於刪除 unique 限制的 SQL 語句。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能。

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

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

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

刪除 SQL 視圖。

public string dropView ( $viewName )
$viewName string

要刪除的視圖名稱。

傳回 string

DROP VIEW SQL 語句。

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

            
executeResetSequence() public method (自 2.0.16 版本起可用)

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

執行用於重設表格主鍵序列值的 SQL 語句。

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

public void executeResetSequence ( $table, $value null )
$table string

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

$value array|string|null

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

拋出 yii\base\NotSupportedException

如果底層 DBMS 不支援此功能

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

            
extractAlias() protected method (自 2.0.24 版本起可用)

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

如果存在表格別名,則提取表格別名;否則返回 false。

protected boolean|array extractAlias ( $table )
$table

                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 )
$type string|yii\db\ColumnSchemaBuilder

抽象欄位類型

傳回 string

實體欄位類型。

                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 (自 2.0.14 版本起可用)

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

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

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

另請參閱 $expressionBuilders

public yii\db\ExpressionBuilderInterface getExpressionBuilder ( yii\db\ExpressionInterface $expression )
$expression yii\db\ExpressionInterface
拋出 yii\base\InvalidArgumentException

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

                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

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

檢查給定的限制是否有效。

protected boolean hasLimit ( $limit )
$limit mixed

給定的限制

傳回 boolean

限制是否有效

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

            
hasMethod() public method

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

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

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

public boolean hasMethod ( $name )
$name string

方法名稱

傳回 boolean

方法是否已定義

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

            
hasOffset() protected method

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

檢查給定的偏移量是否有效。

protected boolean hasOffset ( $offset )
$offset mixed

給定的偏移量

傳回 boolean

偏移量是否有效

                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 )
$name string

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

傳回 boolean

屬性是否被定義

                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 ( )

                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); ` 此方法將正確地跳脫資料表和欄位名稱。

public string insert ( $table, $columns, &$params )
$table string

將在其中插入新列的資料表。

$columns array|yii\db\Query

要插入到資料表中的欄位資料 (名稱 => 值) 或 Query 的實例,以執行 INSERT INTO ... SELECT SQL 陳述式。從 2.0.11 版本開始提供傳遞 Query

$params array

此方法將產生的繫結參數。它們應稍後繫結到資料庫命令。

傳回 string

INSERT SQL

                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()

為 INSERT INTO ... SELECT SQL 語句準備 select-subquery 和欄位名稱。

protected array prepareInsertSelectSubQuery ( $columns, $schema, $params = [] )
$columns yii\db\Query

代表 select 查詢的物件。

$schema yii\db\Schema

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

$params array

要繫結到產生的 SQL 語句的參數。 這些參數將與查詢建構過程中產生的額外參數一起包含在結果中。

傳回 array

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

拋出 yii\base\InvalidArgumentException

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

                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()

INSERT SQL 語句準備 VALUES 部分。

protected array prepareInsertValues ( $table, $columns, $params = [] )
$table string

將在其中插入新列的資料表。

$columns array|yii\db\Query

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

$params array

此方法將產生的繫結參數。它們應稍後繫結到資料庫命令。

傳回 array

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

                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()

UPDATE SQL 語句準備 SET 部分。

protected array prepareUpdateSets ( $table, $columns, $params = [] )
$table string

要更新的資料表。

$columns array

要更新的欄位資料 (名稱 => 值)。

$params array

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

傳回 array

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

                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 = [] )
$table string
$insertColumns array|yii\db\Query
$updateColumns array|boolean
$constraints yii\db\Constraint[]

此參數接收相符的約束清單。約束將依其欄位名稱為唯一。

                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

建立用於重新命名欄位的 SQL 語句。

public string renameColumn ( $table, $oldName, $newName )
$table string

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

$oldName string

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

$newName string

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

傳回 string

用於重新命名資料庫欄位的 SQL 陳述式。

拋出 yii\base\NotSupportedException

SQLite 不支援此功能

                public function renameColumn($table, $oldName, $newName)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
}

            
renameTable() public method

建立用於重新命名資料庫表格的 SQL 語句。

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

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

$newName string

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

傳回 string

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

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

            
resetSequence() public method

建立用於重設表格主鍵序列值的 SQL 語句。

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

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

其主鍵序列將被重置的資料表名稱

$value mixed

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

傳回 string

用於重置序列的 SQL 陳述式

拋出 yii\base\InvalidArgumentException

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

                public function resetSequence($tableName, $value = null)
{
    $db = $this->db;
    $table = $db->getTableSchema($tableName);
    if ($table !== null && $table->sequenceName !== null) {
        $tableName = $db->quoteTableName($tableName);
        if ($value === null) {
            $key = $this->db->quoteColumnName(reset($table->primaryKey));
            $value = $this->db->useMaster(function (Connection $db) use ($key, $tableName) {
                return $db->createCommand("SELECT MAX($key) FROM $tableName")->queryScalar();
            });
        } else {
            $value = (int) $value - 1;
        }
        return "UPDATE sqlite_sequence SET seq='$value' WHERE name='{$table->name}'";
    } 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)

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

建立 SELECT EXISTS() SQL 語句。

public string selectExists ( $rawSql )
$rawSql string

要從中選取的原始形式的子查詢。

傳回 string

SELECT EXISTS() SQL 陳述式。

                public function selectExists($rawSql)
{
    return 'SELECT EXISTS(' . $rawSql . ')';
}

            
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]

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

            
setExpressionBuilders() public method (available since version 2.0.14)
public void setExpressionBuilders ( $builders )
$builders string[]

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

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

            
truncateTable() public method

建立用於截斷資料庫表格的 SQL 語句。

public string truncateTable ( $table )
$table string

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

傳回 string

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

                public function truncateTable($table)
{
    return 'DELETE FROM ' . $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 )
$table string

要更新的資料表。

$columns array

要更新的欄位資料 (名稱 => 值)。

$condition array|string

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

$params array

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

傳回 string

UPDATE SQL

                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://stackoverflow.com/questions/15277373/sqlite-upsert-update-or-insert/15277374#15277374

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

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

$insertColumns array|yii\db\Query

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

$updateColumns array|boolean

如果欄位資料已存在,則要更新的欄位資料 (名稱 => 值)。如果傳遞 true,則欄位資料將更新為符合插入欄位資料。如果傳遞 false,如果欄位資料已存在,則不會執行更新。

$params array

此方法將產生的繫結參數。它們應稍後繫結到資料庫命令。

傳回 string

產生的 SQL。

拋出 yii\base\NotSupportedException

如果底層 DBMS 不支援此功能。

                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;
    }
    list(, $placeholders, $values, $params) = $this->prepareInsertValues($table, $insertColumns, $params);
    $insertSql = 'INSERT OR IGNORE INTO ' . $this->db->quoteTableName($table)
        . (!empty($insertNames) ? ' (' . implode(', ', $insertNames) . ')' : '')
        . (!empty($placeholders) ? ' VALUES (' . implode(', ', $placeholders) . ')' : $values);
    if ($updateColumns === false) {
        return $insertSql;
    }
    $updateCondition = ['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=(SELECT $quotedName FROM `EXCLUDED`)";
        }
        $updateCondition[] = $constraintCondition;
    }
    if ($updateColumns === true) {
        $updateColumns = [];
        foreach ($updateNames as $name) {
            $quotedName = $this->db->quoteColumnName($name);
            if (strrpos($quotedName, '.') === false) {
                $quotedName = "(SELECT $quotedName FROM `EXCLUDED`)";
            }
            $updateColumns[$name] = new Expression($quotedName);
        }
    }
    $updateSql = 'WITH "EXCLUDED" (' . implode(', ', $insertNames)
        . ') AS (' . (!empty($placeholders) ? 'VALUES (' . implode(', ', $placeholders) . ')' : ltrim($values, ' ')) . ') '
        . $this->update($table, $updateColumns, $updateCondition, $params);
    return "$updateSql; $insertSql;";
}