1 追蹤者

類別 yii\db\QueryBuilder

繼承yii\db\QueryBuilder » yii\base\BaseObject
實作yii\base\Configurable
子類別yii\db\cubrid\QueryBuilder, yii\db\mssql\QueryBuilder, yii\db\mysql\QueryBuilder, yii\db\oci\QueryBuilder, yii\db\pgsql\QueryBuilder, yii\db\sqlite\QueryBuilder
可用版本自2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/db/QueryBuilder.php

QueryBuilder 根據 yii\db\Query 物件給定的規格建立 SELECT SQL 語句。

SQL 語句是從 yii\db\Query 物件使用 build() 方法建立的。

QueryBuilder 也被 yii\db\Command 用於建立 SQL 語句,例如 INSERT、UPDATE、DELETE、CREATE TABLE。

有關 QueryBuilder 的更多詳細資訊和使用資訊,請參閱查詢建立器的指南文章

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$conditionBuilders 陣列 查詢條件到建立器方法的映射。 yii\db\QueryBuilder
$conditionClasses 陣列 條件別名到條件類別的映射。 yii\db\QueryBuilder
$db yii\db\Connection 資料庫連線。 yii\db\QueryBuilder
$expressionBuilders 字串[]|yii\db\ExpressionBuilderInterface[] 將表達式類別映射到表達式建立器類別。 yii\db\QueryBuilder
$separator 字串 SQL 語句不同片段之間的分隔符。 yii\db\QueryBuilder
$typeMap 陣列 抽象的欄位類型映射到實體的欄位類型。 yii\db\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\QueryBuilder
addColumn() 建立 SQL 陳述式,用於新增資料庫資料行。 yii\db\QueryBuilder
addCommentOnColumn() 建立 SQL 指令,用於為資料行新增註解。 yii\db\QueryBuilder
addCommentOnTable() 建立 SQL 指令,用於為表格新增註解。 yii\db\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\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() 建立類似 "資料行" 運算子 值 的 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\QueryBuilder
dropColumn() 建立 SQL 陳述式,用於刪除資料庫資料行。 yii\db\QueryBuilder
dropCommentFromColumn() 建立 SQL 指令,用於為資料行新增註解。 yii\db\QueryBuilder
dropCommentFromTable() 建立 SQL 指令,用於為表格新增註解。 yii\db\QueryBuilder
dropDefaultValue() 建立 SQL 指令,用於刪除預設值約束。 yii\db\QueryBuilder
dropForeignKey() 建立 SQL 陳述式,用於刪除外鍵約束。 yii\db\QueryBuilder
dropIndex() 建立 SQL 陳述式,用於刪除索引。 yii\db\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\QueryBuilder
selectExists() 建立 SELECT EXISTS() SQL 陳述式。 yii\db\QueryBuilder
setConditionClasses() $conditionClasses 屬性的設定器。 yii\db\QueryBuilder
setExpressionBuilders() $expressionBuilders 屬性的設定器。 yii\db\QueryBuilder
truncateTable() 建立 SQL 陳述式,用於截斷資料庫表格。 yii\db\QueryBuilder
update() 建立 UPDATE SQL 陳述式。 yii\db\QueryBuilder
upsert() 建立 SQL 陳述式,用於在資料庫表格中插入資料列 (如果它們尚不存在,並符合唯一性約束),或者在它們存在時更新它們。 yii\db\QueryBuilder

受保護的方法

隱藏繼承的方法

方法 描述 定義於
defaultConditionClasses() 包含預設條件類別的陣列。如果您想變更查詢產生器的預設條件類別,請擴展此方法。詳情請參閱 $conditionClasses 文件。 yii\db\QueryBuilder
defaultExpressionBuilders() 包含預設運算式產生器的陣列。如果您想變更此查詢產生器的預設運算式產生器,請擴展並覆寫此方法。詳情請參閱 $expressionBuilders 文件。 yii\db\QueryBuilder
extractAlias() 如果存在表格別名,則提取表格別名;否則傳回 false yii\db\QueryBuilder
hasLimit() 檢查給定的限制是否有效。 yii\db\QueryBuilder
hasOffset() 檢查給定的偏移量是否有效。 yii\db\QueryBuilder
prepareInsertSelectSubQuery() 為 INSERT INTO ... SELECT SQL 陳述式準備 select 子查詢和欄位名稱。 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

屬性詳情

隱藏繼承的屬性

$conditionBuilders 受保護的屬性
自 2.0.14 版本起已棄用。未使用,將在 2.1.0 版本中移除。

查詢條件到產生器方法的對應表。這些方法由 buildCondition() 用於從陣列語法建立 SQL 條件。

protected array $conditionBuilders = []
$conditionClasses 受保護的屬性 (自 2.0.14 版本起可用)

條件別名到條件類別的對應表。例如

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

此屬性由 createConditionFromArray() 方法使用。請參閱 defaultConditionClasses() 方法中的預設條件類別列表。

如果您想新增自訂條件支援,請使用 setConditionClasses() 方法。

另請參閱

protected array $conditionClasses = []
$db 公開屬性

資料庫連線。

public yii\db\Connection $db null
$expressionBuilders 受保護的屬性 (自 2.0.14 版本起可用)

將運算式類別對應到運算式產生器類別。例如

[
   yii\db\Expression::class => yii\db\ExpressionBuilder::class
]

此屬性主要由 buildExpression() 用於從運算式物件建立 SQL 運算式。請參閱 defaultExpressionBuilders() 方法中的預設值。

若要覆寫現有的產生器或新增自訂產生器,請使用 setExpressionBuilder() 方法。新項目將新增到此陣列的末尾。

為了尋找產生器,buildExpression() 將檢查運算式類別是否在此對應表中完全存在。如果不存在,則將反向迭代陣列,檢查運算式是否擴展了在此對應表中定義的類別。

另請參閱

$separator 公開屬性

SQL 陳述式不同片段之間的分隔符號。預設為空格。這主要由 build() 在產生 SQL 陳述式時使用。

public string $separator ' '
$typeMap 公開屬性

抽象資料行類型對應到實體資料行類型。這主要用於支援使用獨立於資料庫的資料類型規格來建立/修改表格。子類別應覆寫此屬性以宣告支援的類型對應。

public array $typeMap = []

方法詳情

隱藏繼承的方法

__call() 公開方法

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

呼叫指定的非類別方法。

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

public mixed __call ( $name, $params )
$name 字串

方法名稱

$params 陣列

方法參數

傳回 mixed

方法傳回值

拋出 yii\base\UnknownMethodException

當呼叫未知方法時

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

            
__construct() 公開方法

建構函式。

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

資料庫連線。

$config 陣列

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

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

            
__get() 公開方法

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

傳回物件屬性的值。

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

另請參閱 __set()

public mixed __get ( $name )
$name 字串

屬性名稱

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

定義於: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 字串

屬性名稱或事件名稱

傳回 boolean

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

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

            
__set() 公開方法

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

設定物件屬性的值。

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

另請參閱 __get()

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

屬性名稱或事件名稱

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

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

將物件屬性設定為 null。

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

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

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

public void __unset ( $name )
$name 字串

屬性名稱

拋出 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() 公開方法 (自 2.0.13 版本起可用)

建立 SQL 指令,用於為現有表格新增檢查約束。

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

檢查約束的名稱。名稱將由此方法正確地加上引號。

$table 字串

將在其上新增檢查約束的表格。名稱將由此方法正確地加上引號。

$expression 字串

CHECK 約束的 SQL。

傳回 字串

用於為現有表格新增檢查約束的 SQL 陳述式。

                public function addCheck($name, $table, $expression)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
        . $this->db->quoteColumnName($name) . ' CHECK (' . $this->db->quoteSql($expression) . ')';
}

            
addColumn() 公開方法

建立 SQL 陳述式,用於新增資料庫資料行。

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

將在其上新增新資料行的表格。表格名稱將由此方法正確地加上引號。

$column 字串

新資料行的名稱。名稱將由此方法正確地加上引號。

$type 字串

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

傳回 字串

用於新增新資料行的 SQL 陳述式。

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

            
addCommentOnColumn() 公開方法 (自 2.0.8 版本起可用)

建立 SQL 指令,用於為資料行新增註解。

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

要註解其資料行的表格。表格名稱將由此方法正確地加上引號。

$column 字串

要註解的資料行名稱。資料行名稱將由此方法正確地加上引號。

$comment 字串

要新增的註解文字。註解將由此方法正確地加上引號。

傳回 字串

用於為資料行新增註解的 SQL 陳述式

                public function addCommentOnColumn($table, $column, $comment)
{
    return 'COMMENT ON COLUMN ' . $this->db->quoteTableName($table) . '.' . $this->db->quoteColumnName($column) . ' IS ' . $this->db->quoteValue($comment);
}

            
addCommentOnTable() 公開方法 (自 2.0.8 版本起可用)

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

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

要註解其資料行的表格。表格名稱將由此方法正確地加上引號。

$comment 字串

要新增的註解文字。註解將由此方法正確地加上引號。

傳回 字串

用於為表格新增註解的 SQL 陳述式

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

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

建立 SQL 指令,用於為現有表格新增預設值約束。

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

預設值約束的名稱。名稱將由此方法正確地加上引號。

$table 字串

將在其上新增預設值約束的表格。名稱將由此方法正確地加上引號。

$column 字串

將在其上新增約束的資料行名稱。名稱將由此方法正確地加上引號。

$value mixed

預設值。

傳回 字串

用於為現有表格新增預設值約束的 SQL 陳述式。

拋出 yii\base\NotSupportedException

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

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

            
addForeignKey() 公開方法

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

此方法將正確地為表格和資料行名稱加上引號。

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

外鍵約束的名稱。

$table 字串

將在其上新增外鍵約束的表格。

$columns string|array

將在其上新增約束的資料行名稱。如果有多個資料行,請用逗號分隔它們,或使用陣列來表示它們。

$refTable 字串

外鍵參考的表格。

$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

傳回 字串

用於為現有表格新增外鍵約束的 SQL 陳述式。

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

            
addPrimaryKey() 公開方法

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

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

主鍵約束的名稱。

$table 字串

將在其上新增主鍵約束的表格。

$columns string|array

主鍵將包含的以逗號分隔的字串或資料行陣列。

傳回 字串

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

                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 起可用)

建立 SQL 指令,用於為現有表格新增唯一性約束。

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

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

$table 字串

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

$columns string|array

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

傳回 字串

用於將唯一約束新增至現有表格的 SQL 陳述式。

                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

建立 SQL 陳述式,用於變更資料行的定義。

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

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

$column 字串

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

$type 字串

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

傳回 字串

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

                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

產生批次 INSERT SQL 陳述式。

例如,

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

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

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

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

新列將被插入的表格。

$columns 陣列

欄位名稱

$rows array|Generator

要批量插入到表格中的列

$params 陣列

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

傳回 字串

批量 INSERT SQL 陳述式

                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 起可用)

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

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

通過引用傳遞

傳回 字串

$params 陣列中的佔位符名稱

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

            
build() public method

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

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

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

$params 陣列

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

傳回 陣列

生成的 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() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

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

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

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

$operands 陣列

要連接的 SQL 表達式。

$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

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

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

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

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

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

$operands 陣列

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

$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildColumns() public method

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

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

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

要處理的欄位

傳回 字串

處理結果

                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

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

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

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

$params 陣列

要填充的綁定參數

傳回 字串

生成的 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() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

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

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

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

$operands 陣列

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

$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

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

要構建的表達式

$params 陣列

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

傳回 字串

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

拋出 yii\base\InvalidArgumentException

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

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

            
buildFrom() public method

public string buildFrom ( $tables, &$params )
$tables 陣列
$params 陣列

要填充的綁定參數

傳回 字串

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 method

public string buildGroupBy ( $columns )
$columns 陣列
傳回 字串

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() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

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

public string buildHashCondition ( $condition, &$params )
$condition 陣列

條件規範。

$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

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

            
buildHaving() public method

public string buildHaving ( $condition, &$params )
$condition string|array
$params 陣列

要填充的綁定參數

傳回 字串

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

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

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

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

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

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

$operands 陣列

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

$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

拋出 yii\db\Exception

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

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

            
buildJoin() public method

public string buildJoin ( $joins, &$params )
$joins 陣列
$params 陣列

要填充的綁定參數

傳回 字串

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() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

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

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

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

$operands 陣列

一個包含兩個或三個運算元的陣列

  • 第一個運算元是欄位名稱。
  • 第二個運算元是單個值或值陣列,欄位值應與之比較。如果它是一個空陣列,則如果運算符為 LIKEOR LIKE,則生成的表達式將為 false 值,如果運算符為 NOT LIKEOR NOT LIKE,則為空。
  • 還可以提供可選的第三個運算元,以指定如何跳脫值中的特殊字元。運算元應為從特殊字元到其跳脫對應項的映射陣列。如果未提供此運算元,將使用預設的跳脫映射。您可以使用 false 或空陣列來指示值已經跳脫,不應應用跳脫。請注意,當使用跳脫映射(或未提供第三個運算元)時,值將自動括在成對的百分號字元內。
$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

                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
傳回 字串

LIMIT 和 OFFSET 子句

                public function buildLimit($limit, $offset)
{
    $sql = '';
    if ($this->hasLimit($limit)) {
        $sql = 'LIMIT ' . $limit;
    }
    if ($this->hasOffset($offset)) {
        $sql .= ' OFFSET ' . $offset;
    }
    return ltrim($sql);
}

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

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

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

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

$operands 陣列

要連接的 SQL 表達式。

$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildOrderBy() public method

public string buildOrderBy ( $columns )
$columns 陣列
傳回 字串

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

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

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

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

$orderBy 陣列

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

$limit integer

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

$offset integer

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

傳回 字串

使用 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 method

public string buildSelect ( $columns, &$params, $distinct false, $selectOption null )
$columns 陣列
$params 陣列

要填充的綁定參數

$distinct boolean
$selectOption string|null
傳回 字串

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() public method
自 2.0.14 版本起已棄用。請改用 buildCondition()

建立類似 "資料行" 運算子 值 的 SQL 運算式。

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

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

$operands 陣列

包含兩個欄位名稱。

$params 陣列

要填充的綁定參數

傳回 字串

生成的 SQL 表達式

拋出 yii\base\InvalidArgumentException

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

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

            
buildUnion() public method

public string buildUnion ( $unions, &$params )
$unions 陣列
$params 陣列

要填充的綁定參數

傳回 字串

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 method

public string buildWhere ( $condition, &$params )
$condition string|array
$params 陣列

要填充的綁定參數

傳回 字串

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

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

            
buildWithQueries() public method (自版本 2.0.35 起可用)

另請參閱 yii\db\Query::withQuery()

public string buildWithQueries ( $withs, &$params )
$withs 陣列

每個 WITH 查詢的配置

$params 陣列

要填充的綁定參數

傳回 字串

已編譯的查詢 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() public method

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

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

如果屬性是可讀取的

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

另請參閱 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true )
$name 字串

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

傳回 boolean

屬性是否可以讀取

                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 )
$name 字串

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

傳回 boolean

屬性是否可以寫入

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

            
checkIntegrity() public method

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

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

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

$schema 字串

表格的綱要。預設為空字串,表示當前或預設綱要。

$table 字串

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

傳回 字串

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

拋出 yii\base\NotSupportedException

如果底層 DBMS 不支持此功能

                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 ( )
傳回 字串

此類別的完整限定名稱。

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

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

根據 $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 字串

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

$table 字串

將為其建立新索引的資料表。資料表名稱將由此方法正確地加上引號。

$columns string|array

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

$unique boolean

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

傳回 字串

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

                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

建立 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 字串

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

$columns 陣列

新資料表中的欄位(name => definition)。

$options string|null

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

傳回 字串

用於建立新 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 版本起可用)

建立 SQL 檢視表。

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

要建立的檢視表名稱。

$subQuery string|yii\db\Query

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

傳回 字串

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

包含預設條件類別的陣列。如果您想變更查詢產生器的預設條件類別,請擴展此方法。詳情請參閱 $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 文件。

另請參閱 $expressionBuilders

protected array defaultExpressionBuilders ( )

                protected function defaultExpressionBuilders()
{
    return [
        'yii\db\Query' => 'yii\db\QueryExpressionBuilder',
        'yii\db\PdoValue' => 'yii\db\PdoValueBuilder',
        'yii\db\Expression' => 'yii\db\ExpressionBuilder',
        'yii\db\conditions\ConjunctionCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
        'yii\db\conditions\NotCondition' => 'yii\db\conditions\NotConditionBuilder',
        'yii\db\conditions\AndCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
        'yii\db\conditions\OrCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
        'yii\db\conditions\BetweenCondition' => 'yii\db\conditions\BetweenConditionBuilder',
        'yii\db\conditions\InCondition' => 'yii\db\conditions\InConditionBuilder',
        'yii\db\conditions\LikeCondition' => 'yii\db\conditions\LikeConditionBuilder',
        'yii\db\conditions\ExistsCondition' => 'yii\db\conditions\ExistsConditionBuilder',
        'yii\db\conditions\SimpleCondition' => 'yii\db\conditions\SimpleConditionBuilder',
        'yii\db\conditions\HashCondition' => 'yii\db\conditions\HashConditionBuilder',
        'yii\db\conditions\BetweenColumnsCondition' => 'yii\db\conditions\BetweenColumnsConditionBuilder',
    ];
}

            
delete() public method

建立 DELETE SQL 陳述式。

例如,

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

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

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

將從中刪除資料的資料表。

$condition array|string

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

$params 陣列

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

傳回 字串

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 字串

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

$table 字串

要刪除其 check 限制的資料表。名稱將由此方法正確地加上引號。

傳回 字串

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

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

            
dropColumn() public method

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

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

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

$column 字串

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

傳回 字串

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

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

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

建立 SQL 指令,用於為資料行新增註解。

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

要註解其資料行的表格。表格名稱將由此方法正確地加上引號。

$column 字串

要註解的資料行名稱。資料行名稱將由此方法正確地加上引號。

傳回 字串

用於為資料行新增註解的 SQL 陳述式

                public function dropCommentFromColumn($table, $column)
{
    return 'COMMENT ON COLUMN ' . $this->db->quoteTableName($table) . '.' . $this->db->quoteColumnName($column) . ' IS NULL';
}

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

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

public string dropCommentFromTable ( $table )
$table 字串

要註解其資料行的表格。表格名稱將由此方法正確地加上引號。

傳回 字串

用於為資料行新增註解的 SQL 陳述式

                public function dropCommentFromTable($table)
{
    return 'COMMENT ON TABLE ' . $this->db->quoteTableName($table) . ' IS NULL';
}

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

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

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

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

$table 字串

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

傳回 字串

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

拋出 yii\base\NotSupportedException

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

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

            
dropForeignKey() public method

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

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

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

$table 字串

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

傳回 字串

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

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

            
dropIndex() public method

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

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

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

$table 字串

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

傳回 字串

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

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

            
dropPrimaryKey() public method

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

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

要移除的主鍵限制名稱。

$table 字串

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

傳回 字串

用於從現有資料表移除主鍵限制的 SQL 陳述式。

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

            
dropTable() public method

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

public string dropTable ( $table )
$table 字串

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

傳回 字串

用於刪除 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 字串

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

$table 字串

要刪除其 unique 限制的資料表。名稱將由此方法正確地加上引號。

傳回 字串

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

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

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

刪除 SQL 檢視表。

public string dropView ( $viewName )
$viewName 字串

要刪除的檢視表名稱。

傳回 字串

DROP VIEW SQL 陳述式。

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

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

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

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

public void executeResetSequence ( $table, $value null )
$table 字串

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

$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 版本起可用)

如果存在表格別名,則提取表格別名;否則傳回 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

將抽象資料行類型轉換為實體資料行類型。

轉換是使用 $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:integer 類型,將轉換為 "int(11)"
  • bigint:大整數類型,將轉換為 "bigint(20)"
  • boolean:boolean 類型,將轉換為 "tinyint(1)"
  • float`: float 數字類型,將轉換為 "float"
  • decimal:decimal 數字類型,將轉換為 "decimal"
  • datetime:datetime 類型,將轉換為 "datetime"
  • timestamp:timestamp 類型,將轉換為 "timestamp"
  • time:time 類型,將轉換為 "time"
  • date:date 類型,將轉換為 "date"
  • money: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

抽象欄位類型

傳回 字串

實體欄位類型。

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

取得適用於 $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

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

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 字串

方法名稱

傳回 boolean

方法是否已定義

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

            
hasOffset() protected method

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

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

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

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

如果滿足以下條件,則定義了屬性

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

另請參閱

public boolean hasProperty ( $name, $checkVars true )
$name 字串

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

傳回 boolean

屬性是否已定義

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

            
init() public method

初始化物件。

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

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

建立 INSERT SQL 陳述式。

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

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

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

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

新列將被插入的表格。

$columns array|yii\db\Query

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

$params 陣列

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

傳回 字串

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)

為 INSERT INTO ... SELECT SQL 陳述式準備 select 子查詢和欄位名稱。

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

代表 select 查詢的物件。

$schema yii\db\Schema

用於引用資料行名稱的 Schema 物件。

$params 陣列

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

傳回 陣列

資料行名稱、值和參數的陣列。

拋出 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)

INSERT SQL 陳述式準備 VALUES 部分。

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

新列將被插入的表格。

$columns array|yii\db\Query

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

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

UPDATE SQL 陳述式準備 SET 部分。

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

要更新的表格。

$columns 陣列

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

$params 陣列

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

傳回 陣列

用於 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 字串
$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 字串

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

$oldName 字串

資料行的舊名稱。名稱將由此方法正確引用。

$newName 字串

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

傳回 字串

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

                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

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

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

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

$newName 字串

表格的新名稱。名稱將由此方法正確引用。

傳回 字串

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

                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 ( $table, $value null )
$table 字串

其主鍵序列將被重設的表格名稱

$value array|string|null

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

傳回 字串

用於重設序列的 SQL 陳述式

拋出 yii\base\NotSupportedException

如果底層 DBMS 不支持此功能

                public function resetSequence($table, $value = null)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support resetting sequence.');
}

            
selectExists() public method (available since version 2.0.8)

建立 SELECT EXISTS() SQL 陳述式。

public string selectExists ( $rawSql )
$rawSql 字串

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

傳回 字串

SELECT EXISTS() SQL 陳述式。

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

            
setConditionClasses() public method (available since version 2.0.14.2)

$conditionClasses 屬性的設定器。

另請參閱 $conditionClasses

public void setConditionClasses ( $classes )
$classes 字串[]

條件別名到條件類別的對應表。例如

['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)

$expressionBuilders 屬性的設定器。

另請參閱 $expressionBuilders

public void setExpressionBuilders ( $builders )
$builders 字串[]

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

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

            
truncateTable() public method

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

public string truncateTable ( $table )
$table 字串

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

傳回 字串

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

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

            
update() public method

建立 UPDATE SQL 陳述式。

例如,

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

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

public string update ( $table, $columns, $condition, &$params )
$table 字串

要更新的表格。

$columns 陣列

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

$condition array|string

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

$params 陣列

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

傳回 字串

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

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

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

新列將插入/更新至其中的表格。

$insertColumns array|yii\db\Query

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

$updateColumns array|boolean

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

$params 陣列

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

傳回 字串

產生的 SQL。

拋出 yii\base\NotSupportedException

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

                public function upsert($table, $insertColumns, $updateColumns, &$params)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support upsert statements.');
}