類別 yii\db\cubrid\QueryBuilder
繼承 | yii\db\cubrid\QueryBuilder » yii\db\QueryBuilder » yii\base\BaseObject |
---|---|
實作 | yii\base\Configurable |
自版本起可用 | 2.0 |
原始碼 | https://github.com/yiisoft/yii2/blob/master/framework/db/cubrid/QueryBuilder.php |
QueryBuilder 是用於 CUBRID 資料庫(版本 9.3.x 及更高版本)的查詢建構器。
公開屬性
屬性 | 類型 | 描述 | 定義於 |
---|---|---|---|
$conditionBuilders | array | 查詢條件到建構器方法的對應。 | yii\db\QueryBuilder |
$conditionClasses | array | 條件別名到條件類別的對應。 | yii\db\QueryBuilder |
$db | yii\db\Connection | 資料庫連線。 | yii\db\QueryBuilder |
$expressionBuilders | string[]|yii\db\ExpressionBuilderInterface[] | 表達式類別到表達式建構器類別的對應。 | yii\db\QueryBuilder |
$separator | string | SQL 陳述式不同片段之間的分隔符。 | yii\db\QueryBuilder |
$typeMap | array | 從抽象欄位類型(鍵)到實體欄位類型(值)的對應。 | yii\db\cubrid\QueryBuilder |
公開方法
Protected Methods
方法 | 描述 | 定義於 |
---|---|---|
受保護方法 | defaultConditionClasses() | yii\db\QueryBuilder |
包含預設條件類別的陣列。如果您想變更查詢產生器的預設條件類別,請擴充此方法。請參閱 $conditionClasses 文件以瞭解詳細資訊。 | defaultExpressionBuilders() | yii\db\cubrid\QueryBuilder |
包含預設運算式產生器的陣列。如果您想變更此查詢產生器的預設運算式產生器,請擴充並覆寫此方法。請參閱 $expressionBuilders 文件以瞭解詳細資訊。 | extractAlias() | yii\db\QueryBuilder |
如果存在表格別名,則提取表格別名,否則傳回 false | hasLimit() | yii\db\QueryBuilder |
檢查給定的 limit 是否有效。 | hasOffset() | yii\db\QueryBuilder |
檢查給定的 offset 是否有效。 | prepareInsertSelectSubQuery() | yii\db\QueryBuilder |
為 INSERT INTO ... SELECT SQL 陳述式準備 select 子查詢和欄位名稱。 | prepareInsertValues() | yii\db\QueryBuilder |
為 INSERT SQL 陳述式準備 VALUES 部分。 |
prepareUpdateSets() | yii\db\QueryBuilder |
為 UPDATE SQL 陳述式準備 SET 部分。 |
yii\db\QueryBuilder |
prepareUpsertColumns()
常數 | Hide inherited constants | 描述 | 定義於 |
---|---|---|---|
隱藏繼承的常數 | Constant | 常數 | yii\db\QueryBuilder |
Value
從抽象欄位類型(鍵)到實體欄位類型(值)的對應。
':qp'
自動產生的查詢繫結參數的前綴。
呼叫未定義為類別方法的指定名稱方法。
Property Details
屬性詳情 | ||
$typeMap public property | string |
public array $typeMap = [ |
Method Details | array |
方法詳情 |
__call() public method | 公開方法 |
Defined in: yii\base\BaseObject::__call() |
---|---|---|
定義於: yii\base\BaseObject::__call() | Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked. |
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當調用未知方法時會隱含地被呼叫。 |
public mixed __call ( $name, $params )
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
$name
建構子。
$name | ||
The method name | yii\db\Connection |
資料庫連線。 |
方法名稱 | array |
$params |
public mixed __call ( $name, $params )
public function __construct($connection, $config = [])
{
$this->db = $connection;
parent::__construct($config);
}
Method parameters
傳回物件屬性的值。
方法參數
return
傳回 | ||
$typeMap public property | string |
mixed |
__call() public method | 公開方法 |
mixed |
---|---|---|
定義於: yii\base\BaseObject::__call() | The method return value |
方法傳回值 |
定義於: yii\base\BaseObject::__call() | throws |
拋出 |
public mixed __call ( $name, $params )
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
} elseif (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
yii\base\UnknownMethodException
檢查屬性是否已設定,即已定義且非 null。
when calling unknown method
當呼叫未知方法時
Source code
原始碼 | ||
$typeMap public property | string | |
__call() public method | 公開方法 |
Defined in: yii\db\QueryBuilder::__construct() |
---|
public mixed __call ( $name, $params )
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
return false;
}
public void __construct ( $connection, $config = [] )
設定物件屬性的值。
public void __construct ( $connection, $config = [] )
$connection
$connection | ||
$typeMap public property | string | |
$config | 公開方法 |
mixed |
定義於: yii\base\BaseObject::__call() | The method return value |
方法傳回值 |
---|---|---|
定義於: yii\base\BaseObject::__call() | throws |
$config |
public mixed __call ( $name, $params )
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
定義於: yii\base\BaseObject::__get() | ||
$typeMap public property | string |
mixed |
定義於: yii\base\BaseObject::__call() | throws |
Do not call this method directly as it is a PHP magic method that will be implicitly called when executing |
---|
public mixed __call ( $name, $params )
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
}
}
$value = $object->property;
時會隱含地被呼叫。建立 SQL 命令,用於將檢查約束新增至現有表格。
See also __set(). | ||
$typeMap public property | string |
另請參閱 __set()。 |
public mixed __get ( $name ) | string |
public mixed __get ( $name ) |
The property name | string |
屬性名稱 |
__call() public method | string |
The property value |
---|---|---|
定義於: yii\base\BaseObject::__call() | 屬性值 |
yii\base\UnknownPropertyException |
public mixed __call ( $name, $params )
public function addCheck($name, $table, $expression)
{
throw new NotSupportedException(__METHOD__ . ' is not supported by CUBRID.');
}
if the property is not defined
建立 SQL 陳述式,用於新增新的資料庫欄位。
如果屬性未定義 | ||
public mixed __get ( $name ) | string |
yii\base\InvalidCallException |
yii\base\InvalidCallException | string |
if the property is write-only |
如果屬性為唯寫 | string | |
__call() public method | string |
公開方法 |
---|
public mixed __call ( $name, $params )
public function addColumn($table, $column, $type)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' ADD ' . $this->db->quoteColumnName($column) . ' '
. $this->getColumnType($type);
}
建立 SQL 命令,用於新增欄位註解。
定義於: yii\base\BaseObject::__isset() | ||
public mixed __get ( $name ) | string |
Do not call this method directly as it is a PHP magic method that will be implicitly called when executing |
yii\base\InvalidCallException | string |
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 |
Note that if the property is not defined, false will be returned. | string |
請注意,如果屬性未定義,將傳回 false。 |
__call() public method | string |
See also https://php.dev.org.tw/manual/en/function.isset.php. |
---|
public mixed __call ( $name, $params )
public function addCommentOnColumn($table, $column, $comment)
{
$definition = $this->getColumnDefinition($table, $column);
$definition = trim(preg_replace("/COMMENT '(.*?)'/i", '', $definition));
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' CHANGE ' . $this->db->quoteColumnName($column)
. ' ' . $this->db->quoteColumnName($column)
. (empty($definition) ? '' : ' ' . $definition)
. ' COMMENT ' . $this->db->quoteValue($comment);
}
建立 SQL 命令,用於新增表格註解。
public boolean __isset ( $name ) | ||
public mixed __get ( $name ) | string |
Do not call this method directly as it is a PHP magic method that will be implicitly called when executing |
Note that if the property is not defined, false will be returned. | string |
請注意,如果屬性未定義,將傳回 false。 |
__call() public method | string |
---|
public mixed __call ( $name, $params )
public function addCommentOnTable($table, $comment)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' COMMENT ' . $this->db->quoteValue($comment);
}
屬性名稱或事件名稱
建立 SQL 命令,用於將預設值約束新增至現有表格。
boolean | ||
$typeMap public property | string |
boolean |
public mixed __get ( $name ) | string |
Whether the named property is set (not null). |
yii\base\InvalidCallException | string |
具名屬性是否已設定(非 null)。 |
$config | 公開方法 | |
__call() public method | string |
公開方法 |
---|---|---|
定義於: yii\base\BaseObject::__call() | 屬性值 |
Defined in: yii\base\BaseObject::__set() |
public mixed __call ( $name, $params )
public function addDefaultValue($name, $table, $column, $value)
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support adding default value constraints.');
}
Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $object->property = $value;
.
建立 SQL 陳述式,用於將外鍵約束新增至現有表格。
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 $object->property = $value;
時會隱含地被呼叫。
See also __get(). | ||
$typeMap public property | string |
另請參閱 __get()。 |
public mixed __get ( $name ) | string |
public void __set ( $name, $value ) |
public void __set ( $name, $value ) | $value |
$value |
if the property is read-only | string |
如果屬性為唯讀 |
__unset() public method | $value |
公開方法 |
Defined in: yii\base\BaseObject::__unset() | 定義於: yii\base\BaseObject::__unset() |
Do not call this method directly as it is a PHP magic method that will be implicitly called when executing |
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 unset($object->property) 時會隱含地被呼叫。 |
定義於: yii\base\BaseObject::__unset() |
Note that if the property is not defined, this method will do nothing. If the property is read-only, it will throw an exception. |
__call() public method | string |
請注意,如果屬性未定義,此方法將不執行任何操作。如果屬性為唯讀,則會拋出例外。 |
---|
public mixed __call ( $name, $params )
public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null)
{
$sql = 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' ADD CONSTRAINT ' . $this->db->quoteColumnName($name)
. ' FOREIGN KEY (' . $this->buildColumns($columns) . ')'
. ' REFERENCES ' . $this->db->quoteTableName($refTable)
. ' (' . $this->buildColumns($refColumns) . ')';
if ($delete !== null) {
$sql .= ' ON DELETE ' . $delete;
}
if ($update !== null) {
$sql .= ' ON UPDATE ' . $update;
}
return $sql;
}
另請參閱 https://php.dev.org.tw/manual/en/function.unset.php。
建立 SQL 陳述式,用於將主鍵約束新增至現有表格。
public void __unset ( $name ) | ||
$typeMap public property | string |
public void __unset ( $name ) |
public mixed __get ( $name ) | string |
if the property is read only. |
public void __set ( $name, $value ) | $value |
逗號分隔的字串或欄位陣列,表示主要索引鍵將由哪些欄位組成。 |
__call() public method | string |
將主索引鍵約束新增至現有資料表的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function addPrimaryKey($name, $table, $columns)
{
if (is_string($columns)) {
$columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
}
foreach ($columns as $i => $col) {
$columns[$i] = $this->db->quoteColumnName($col);
}
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
. $this->db->quoteColumnName($name) . ' PRIMARY KEY ('
. implode(', ', $columns) . ')';
}
定義於: yii\db\QueryBuilder::addUnique()
建立 SQL 命令,用於將唯一約束新增至現有表格。
public string addUnique ( $name, $table, $columns ) | ||
$typeMap public property | string |
唯一性約束的名稱。此名稱將由方法正確地加上引號。 |
public mixed __get ( $name ) | string |
將新增唯一性約束的資料表。此名稱將由方法正確地加上引號。 |
public void __set ( $name, $value ) | $value |
要對其新增約束的欄位名稱。如果有多個欄位,請用逗號分隔它們。此名稱將由方法正確地加上引號。 |
__call() public method | string |
將唯一性約束新增至現有資料表的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function addUnique($name, $table, $columns)
{
if (is_string($columns)) {
$columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
}
foreach ($columns as $i => $col) {
$columns[$i] = $this->db->quoteColumnName($col);
}
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
. $this->db->quoteColumnName($name) . ' UNIQUE ('
. implode(', ', $columns) . ')';
}
定義於: yii\db\QueryBuilder::alterColumn()
建立 SQL 陳述式,用於變更欄位的定義。
public string alterColumn ( $table, $column, $type ) | ||
public mixed __get ( $name ) | string |
要變更欄位的資料表。資料表名稱將由方法正確地加上引號。 |
yii\base\InvalidCallException | string |
要變更的欄位名稱。此名稱將由方法正確地加上引號。 |
如果屬性為唯寫 | string |
新的欄位類型。getColumnType() 方法將被調用,以將抽象欄位類型(如果有的話)轉換為實體欄位類型。任何未被識別為抽象類型的內容都將保留在產生的 SQL 中。例如,'string' 將被轉換為 'varchar(255)',而 'string not null' 將變為 'varchar(255) not null'。 |
__call() public method | string |
用於變更欄位定義的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function alterColumn($table, $column, $type)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' CHANGE '
. $this->db->quoteColumnName($column) . ' '
. $this->db->quoteColumnName($column) . ' '
. $this->getColumnType($type);
}
定義於: yii\db\QueryBuilder::batchInsert()
產生批次 INSERT SQL 陳述式。
例如,
$sql = $queryBuilder->batchInsert('user', ['name', 'age'], [
['Tom', 30],
['Jane', 20],
['Linda', 25],
]);
請注意,每列中的值必須與對應的欄位名稱相符。
此方法將正確地逸出欄位名稱,並為要插入的值加上引號。
public string batchInsert ( $table, $columns, $rows, &$params = [] ) | ||
public mixed __get ( $name ) | string |
新列將被插入的資料表。 |
public void __set ( $name, $value ) | array |
欄位名稱 |
$rows | array|Generator |
要批次插入資料表中的列 |
Method Details | array |
綁定參數。此參數自 2.0.14 版本起存在 |
__call() public method | string |
批次 INSERT SQL 陳述式 |
---|
public mixed __call ( $name, $params )
public function batchInsert($table, $columns, $rows, &$params = [])
{
if (empty($rows)) {
return '';
}
$schema = $this->db->getSchema();
if (($tableSchema = $schema->getTableSchema($table)) !== null) {
$columnSchemas = $tableSchema->columns;
} else {
$columnSchemas = [];
}
$values = [];
foreach ($rows as $row) {
$vs = [];
foreach ($row as $i => $value) {
if (isset($columns[$i], $columnSchemas[$columns[$i]])) {
$value = $columnSchemas[$columns[$i]]->dbTypecast($value);
}
if (is_string($value)) {
$value = $schema->quoteValue($value);
} elseif (is_float($value)) {
// ensure type cast always has . as decimal separator in all locales
$value = StringHelper::floatToString($value);
} elseif ($value === false) {
$value = 0;
} elseif ($value === null) {
$value = 'NULL';
} elseif ($value instanceof ExpressionInterface) {
$value = $this->buildExpression($value, $params);
}
$vs[] = $value;
}
$values[] = '(' . implode(', ', $vs) . ')';
}
if (empty($values)) {
return '';
}
foreach ($columns as $i => $name) {
$columns[$i] = $schema->quoteColumnName($name);
}
return 'INSERT INTO ' . $schema->quoteTableName($table)
. ' (' . implode(', ', $columns) . ') VALUES ' . implode(', ', $values);
}
定義於: yii\db\QueryBuilder::bindParam()
輔助方法,使用 PARAM_PREFIX 將 $value 新增至 $params 陣列。
public string bindParam ( $value, &$params ) | ||
$config | 定義於: yii\base\BaseObject::__unset() | |
Method Details | array |
以引用方式傳遞 |
__call() public method | string |
$params 陣列中的佔位符名稱 |
---|
public mixed __call ( $name, $params )
public function bindParam($value, &$params)
{
$phName = self::PARAM_PREFIX . count($params);
$params[$phName] = $value;
return $phName;
}
定義於: yii\db\QueryBuilder::build()
從 yii\db\Query 物件產生 SELECT SQL 陳述式。
public array build ( $query, $params = [] ) | ||
$query | yii\db\Query |
將從中產生 SQL 陳述式的 yii\db\Query 物件。 |
Method Details | array |
要綁定到產生的 SQL 陳述式的參數。這些參數將與查詢建構過程中產生的額外參數一起包含在結果中。 |
__call() public method | array |
產生的 SQL 陳述式(第一個陣列元素)和要綁定到 SQL 陳述式的對應參數(第二個陣列元素)。傳回的參數包含 |
---|
public mixed __call ( $name, $params )
public function build($query, $params = [])
{
$query = $query->prepare($this);
$params = empty($params) ? $query->params : array_merge($params, $query->params);
$clauses = [
$this->buildSelect($query->select, $params, $query->distinct, $query->selectOption),
$this->buildFrom($query->from, $params),
$this->buildJoin($query->join, $params),
$this->buildWhere($query->where, $params),
$this->buildGroupBy($query->groupBy),
$this->buildHaving($query->having, $params),
];
$sql = implode($this->separator, array_filter($clauses));
$sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset);
if (!empty($query->orderBy)) {
foreach ($query->orderBy as $expression) {
if ($expression instanceof ExpressionInterface) {
$this->buildExpression($expression, $params);
}
}
}
if (!empty($query->groupBy)) {
foreach ($query->groupBy as $expression) {
if ($expression instanceof ExpressionInterface) {
$this->buildExpression($expression, $params);
}
}
}
$union = $this->buildUnion($query->union, $params);
if ($union !== '') {
$sql = "($sql){$this->separator}$union";
}
$with = $this->buildWithQueries($query->withQueries, $params);
if ($with !== '') {
$sql = "$with{$this->separator}$sql";
}
return [$sql, $params];
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildAndCondition()
使用 AND
或 OR
運算子連接兩個或多個 SQL 運算式。
public string buildAndCondition ( $operator, $operands, &$params ) | ||
$operator | string |
用於連接給定運算元的運算符 |
$operands | array |
要連接的 SQL 運算式。 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|
public mixed __call ( $name, $params )
public function buildAndCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildBetweenCondition()
使用 BETWEEN
運算子建立 SQL 運算式。
public string buildBetweenCondition ( $operator, $operands, &$params ) | ||
$operator | string |
要使用的運算符(例如 |
$operands | array |
第一個運算元是欄位名稱。第二個和第三個運算元描述欄位值應在的區間。 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
如果給定的運算元數量錯誤。 |
public mixed __call ( $name, $params )
public function buildBetweenCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildColumns ( $columns ) | ||
public void __set ( $name, $value ) | $value |
要處理的欄位 |
__call() public method | string |
處理結果 |
---|
public mixed __call ( $name, $params )
public function buildColumns($columns)
{
if (!is_array($columns)) {
if (strpos($columns, '(') !== false) {
return $columns;
}
$rawColumns = $columns;
$columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
if ($columns === false) {
throw new InvalidArgumentException("$rawColumns is not valid columns.");
}
}
foreach ($columns as $i => $column) {
if ($column instanceof ExpressionInterface) {
$columns[$i] = $this->buildExpression($column);
} elseif (strpos($column, '(') === false) {
$columns[$i] = $this->db->quoteColumnName($column);
}
}
return implode(', ', $columns);
}
定義於: yii\db\QueryBuilder::buildCondition()
解析條件規格並產生對應的 SQL 運算式。
public string buildCondition ( $condition, &$params ) | ||
$condition | string|array|yii\db\ExpressionInterface |
條件規格。請參閱 yii\db\Query::where() 以了解如何指定條件。 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|
public mixed __call ( $name, $params )
public function buildCondition($condition, &$params)
{
if (is_array($condition)) {
if (empty($condition)) {
return '';
}
$condition = $this->createConditionFromArray($condition);
}
if ($condition instanceof ExpressionInterface) {
return $this->buildExpression($condition, $params);
}
return (string)$condition;
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildExistsCondition()
使用 EXISTS
運算子建立 SQL 運算式。
public string buildExistsCondition ( $operator, $operands, &$params ) | ||
$operator | string |
要使用的運算符(例如 |
$operands | array |
僅包含一個元素,即代表子查詢的 yii\db\Query 物件。 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
如果運算元不是 yii\db\Query 物件。 |
public mixed __call ( $name, $params )
public function buildExistsCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public yii\db\ExpressionInterface buildExpression ( yii\db\ExpressionInterface $expression, &$params = [] ) | ||
The property name | yii\db\ExpressionInterface |
要建構的運算式 |
Method Details | array |
要綁定到產生的 SQL 陳述式的參數。這些參數將與運算式建構過程中產生的額外參數一起包含在結果中。 |
__call() public method | string |
SQL 陳述式,在傳遞給 DBMS 之前,既不會被加上引號也不會被編碼 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
當此 QueryBuilder 不支援 $expression 建構時。 |
public mixed __call ( $name, $params )
public function buildExpression(ExpressionInterface $expression, &$params = [])
{
$builder = $this->getExpressionBuilder($expression);
return $builder->build($expression, $params);
}
public string buildFrom ( $tables, &$params ) | ||
$tables | array | |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
從 yii\db\Query::$from 建構的 FROM 子句。 |
---|
public mixed __call ( $name, $params )
public function buildFrom($tables, &$params)
{
if (empty($tables)) {
return '';
}
$tables = $this->quoteTableNames($tables, $params);
return 'FROM ' . implode(', ', $tables);
}
public string buildGroupBy ( $columns ) | ||
public void __set ( $name, $value ) | array | |
__call() public method | string |
GROUP BY 子句 |
---|
public mixed __call ( $name, $params )
public function buildGroupBy($columns)
{
if (empty($columns)) {
return '';
}
foreach ($columns as $i => $column) {
if ($column instanceof ExpressionInterface) {
$columns[$i] = $this->buildExpression($column);
} elseif (strpos($column, '(') === false) {
$columns[$i] = $this->db->quoteColumnName($column);
}
}
return 'GROUP BY ' . implode(', ', $columns);
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildHashCondition()
根據欄位-值對建立條件。
public string buildHashCondition ( $condition, &$params ) | ||
$condition | array |
條件規格。 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|
public mixed __call ( $name, $params )
public function buildHashCondition($condition, &$params)
{
return $this->buildCondition(new HashCondition($condition), $params);
}
public string buildHaving ( $condition, &$params ) | ||
$condition | $value | |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
從 yii\db\Query::$having 建構的 HAVING 子句。 |
---|
public mixed __call ( $name, $params )
public function buildHaving($condition, &$params)
{
$having = $this->buildCondition($condition, $params);
return $having === '' ? '' : 'HAVING ' . $having;
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildInCondition()
使用 IN
運算子建立 SQL 運算式。
public string buildInCondition ( $operator, $operands, &$params ) | ||
$operator | string |
要使用的運算符(例如 |
$operands | array |
第一個運算元是欄位名稱。如果它是一個陣列,將產生複合 IN 條件。第二個運算元是欄位值應在其中的值陣列。如果它是一個空陣列,則產生的運算式在運算符為 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\db\Exception |
如果給定的運算元數量錯誤。 |
public mixed __call ( $name, $params )
public function buildInCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildJoin ( $joins, &$params ) | ||
$joins | array | |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
從 yii\db\Query::$join 建構的 JOIN 子句。 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\db\Exception |
如果 $joins 參數格式不正確 |
public mixed __call ( $name, $params )
public function buildJoin($joins, &$params)
{
if (empty($joins)) {
return '';
}
foreach ($joins as $i => $join) {
if (!is_array($join) || !isset($join[0], $join[1])) {
throw new Exception('A join clause must be specified as an array of join type, join table, and optionally join condition.');
}
// 0:join type, 1:join table, 2:on-condition (optional)
list($joinType, $table) = $join;
$tables = $this->quoteTableNames((array)$table, $params);
$table = reset($tables);
$joins[$i] = "$joinType $table";
if (isset($join[2])) {
$condition = $this->buildCondition($join[2], $params);
if ($condition !== '') {
$joins[$i] .= ' ON ' . $condition;
}
}
}
return implode($this->separator, $joins);
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildLikeCondition()
使用 LIKE
運算子建立 SQL 運算式。
public string buildLikeCondition ( $operator, $operands, &$params ) | ||
$operator | string |
要使用的運算符(例如 |
$operands | array |
由兩個或三個運算元組成的陣列
|
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
如果給定的運算元數量錯誤。 |
public mixed __call ( $name, $params )
public function buildLikeCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildLimit ( $limit, $offset ) | ||
$limit | integer | |
$offset | integer | |
__call() public method | string |
LIMIT 和 OFFSET 子句 |
---|
public mixed __call ( $name, $params )
public function buildLimit($limit, $offset)
{
$sql = '';
// limit is not optional in CUBRID
// https://www.cubrid.org/manual/en/9.3.0/sql/query/select.html#limit-clause
// "You can specify a very big integer for row_count to display to the last row, starting from a specific row."
if ($this->hasLimit($limit)) {
$sql = 'LIMIT ' . $limit;
if ($this->hasOffset($offset)) {
$sql .= ' OFFSET ' . $offset;
}
} elseif ($this->hasOffset($offset)) {
$sql = "LIMIT 9223372036854775807 OFFSET $offset"; // 2^63-1
}
return $sql;
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildNotCondition()
使用 NOT
運算子反轉 SQL 運算式。
public string buildNotCondition ( $operator, $operands, &$params ) | ||
$operator | string |
用於連接給定運算元的運算符 |
$operands | array |
要連接的 SQL 運算式。 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
如果給定的運算元數量錯誤。 |
public mixed __call ( $name, $params )
public function buildNotCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildOrderBy ( $columns ) | ||
public void __set ( $name, $value ) | array | |
__call() public method | string |
從 yii\db\Query::$orderBy 建構的 ORDER BY 子句。 |
---|
public mixed __call ( $name, $params )
public function buildOrderBy($columns)
{
if (empty($columns)) {
return '';
}
$orders = [];
foreach ($columns as $name => $direction) {
if ($direction instanceof ExpressionInterface) {
$orders[] = $this->buildExpression($direction);
} else {
$orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
}
}
return 'ORDER BY ' . implode(', ', $orders);
}
定義於: yii\db\QueryBuilder::buildOrderByAndLimit()
建立 ORDER BY 和 LIMIT/OFFSET 子句,並將它們附加到給定的 SQL。
public string buildOrderByAndLimit ( $sql, $orderBy, $limit, $offset ) | ||
$sql | string |
現有的 SQL (不含 ORDER BY/LIMIT/OFFSET) |
$orderBy | array |
排序依據欄位。有關如何指定此參數的更多詳細資訊,請參閱 yii\db\Query::orderBy()。 |
$limit | integer |
限制數量。有關更多詳細資訊,請參閱 yii\db\Query::limit()。 |
$offset | integer |
偏移量。有關更多詳細資訊,請參閱 yii\db\Query::offset()。 |
__call() public method | string |
完成 ORDER BY/LIMIT/OFFSET 的 SQL(如果有的話) |
---|
public mixed __call ( $name, $params )
public function buildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
$orderBy = $this->buildOrderBy($orderBy);
if ($orderBy !== '') {
$sql .= $this->separator . $orderBy;
}
$limit = $this->buildLimit($limit, $offset);
if ($limit !== '') {
$sql .= $this->separator . $limit;
}
return $sql;
}
public string buildSelect ( $columns, &$params, $distinct = false, $selectOption = null ) | ||
public void __set ( $name, $value ) | array | |
Method Details | array |
要填入的綁定參數 |
$distinct | 公開方法 | |
$selectOption | 定義於: yii\base\BaseObject::__unset() | |
__call() public method | string |
從 yii\db\Query::$select 建構的 SELECT 子句。 |
---|
public mixed __call ( $name, $params )
public function buildSelect($columns, &$params, $distinct = false, $selectOption = null)
{
$select = $distinct ? 'SELECT DISTINCT' : 'SELECT';
if ($selectOption !== null) {
$select .= ' ' . $selectOption;
}
if (empty($columns)) {
return $select . ' *';
}
foreach ($columns as $i => $column) {
if ($column instanceof ExpressionInterface) {
if (is_int($i)) {
$columns[$i] = $this->buildExpression($column, $params);
} else {
$columns[$i] = $this->buildExpression($column, $params) . ' AS ' . $this->db->quoteColumnName($i);
}
} elseif ($column instanceof Query) {
list($sql, $params) = $this->build($column, $params);
$columns[$i] = "($sql) AS " . $this->db->quoteColumnName($i);
} elseif (is_string($i) && $i !== $column) {
if (strpos($column, '(') === false) {
$column = $this->db->quoteColumnName($column);
}
$columns[$i] = "$column AS " . $this->db->quoteColumnName($i);
} elseif (strpos($column, '(') === false) {
if (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $column, $matches)) {
$columns[$i] = $this->db->quoteColumnName($matches[1]) . ' AS ' . $this->db->quoteColumnName($matches[2]);
} else {
$columns[$i] = $this->db->quoteColumnName($column);
}
}
}
return $select . ' ' . implode(', ', $columns);
}
buildCondition()
。
定義於: yii\db\QueryBuilder::buildSimpleCondition()
建立類似 "column" operator value
的 SQL 運算式。
public string buildSimpleCondition ( $operator, $operands, &$params ) | ||
$operator | string |
要使用的運算符。可以使用任何符號,例如 |
$operands | array |
包含兩個欄位名稱。 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
產生的 SQL 運算式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
如果給定的運算元數量錯誤。 |
public mixed __call ( $name, $params )
public function buildSimpleCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildUnion ( $unions, &$params ) | ||
$unions | array | |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
從 yii\db\Query::$union 建構的 UNION 子句。 |
---|
public mixed __call ( $name, $params )
public function buildUnion($unions, &$params)
{
if (empty($unions)) {
return '';
}
$result = '';
foreach ($unions as $i => $union) {
$query = $union['query'];
if ($query instanceof Query) {
list($unions[$i]['query'], $params) = $this->build($query, $params);
}
$result .= 'UNION ' . ($union['all'] ? 'ALL ' : '') . '( ' . $unions[$i]['query'] . ' ) ';
}
return trim($result);
}
public string buildWhere ( $condition, &$params ) | ||
$condition | $value | |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
從 yii\db\Query::$where 建構的 WHERE 子句。 |
---|
public mixed __call ( $name, $params )
public function buildWhere($condition, &$params)
{
$where = $this->buildCondition($condition, $params);
return $where === '' ? '' : 'WHERE ' . $where;
}
public string buildWithQueries ( $withs, &$params ) | ||
$withs | array |
每個 WITH 查詢的設定 |
Method Details | array |
要填入的綁定參數 |
__call() public method | string |
已編譯的 WITH 查詢前綴,包含巢狀查詢 |
---|
public mixed __call ( $name, $params )
public function buildWithQueries($withs, &$params)
{
if (empty($withs)) {
return '';
}
$recursive = false;
$result = [];
foreach ($withs as $i => $with) {
if ($with['recursive']) {
$recursive = true;
}
$query = $with['query'];
if ($query instanceof Query) {
list($with['query'], $params) = $this->build($query, $params);
}
$result[] = $with['alias'] . ' AS (' . $with['query'] . ')';
}
return 'WITH ' . ($recursive ? 'RECURSIVE ' : '') . implode(', ', $result);
}
定義於: yii\base\BaseObject::canGetProperty()
傳回一個值,指示是否可以讀取屬性。
當屬性可讀取的條件:
- 類別具有與指定名稱相關聯的 getter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱 canSetProperty()。
public boolean canGetProperty ( $name, $checkVars = true ) | ||
$typeMap public property | string |
mixed |
$checkVars | 公開方法 |
是否將成員變數視為屬性 |
__call() public method | 公開方法 |
屬性是否可讀取 |
---|
public mixed __call ( $name, $params )
public function canGetProperty($name, $checkVars = true)
{
return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}
定義於: yii\base\BaseObject::canSetProperty()
傳回一個值,指示是否可以設定屬性。
當屬性可寫入的條件:
- 類別具有與指定名稱相關聯的 setter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱 canGetProperty()。
public boolean canSetProperty ( $name, $checkVars = true ) | ||
$typeMap public property | string |
mixed |
$checkVars | 公開方法 |
是否將成員變數視為屬性 |
__call() public method | 公開方法 |
屬性是否可寫入 |
---|
public mixed __call ( $name, $params )
public function canSetProperty($name, $checkVars = true)
{
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}
定義於: yii\db\QueryBuilder::checkIntegrity()
建立 SQL 陳述式,用於啟用或停用完整性檢查。
public string checkIntegrity ( $check = true, $schema = '', $table = '' ) | ||
$check | 公開方法 |
是否開啟或關閉完整性檢查。 |
$schema | string |
表格的結構描述。預設為空字串,表示目前的或預設的結構描述。 |
public mixed __get ( $name ) | string |
表格名稱。預設為空字串,表示不變更任何表格。 |
__call() public method | string |
用於檢查完整性的 SQL 陳述式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | 屬性值 |
如果底層 DBMS 不支援此功能 |
public mixed __call ( $name, $params )
public function checkIntegrity($check = true, $schema = '', $table = '')
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support enabling/disabling integrity check.');
}
::class
。
定義於: yii\base\BaseObject::className()
傳回此類別的完整限定名稱。
public static string className ( ) | ||
__call() public method | string |
此類別的完整限定名稱。 |
---|
public mixed __call ( $name, $params )
public static function className()
{
return get_called_class();
}
定義於: yii\db\QueryBuilder::createConditionFromArray()
根據 $conditionClasses 對應,將陣列格式定義的 $condition(如 yii\db\Query::where() 中所述)轉換為 yii\db\condition\ConditionInterface 的實例。
另請參閱 $conditionClasses。
public yii\db\conditions\ConditionInterface createConditionFromArray ( $condition ) | ||
$condition | $value |
public mixed __call ( $name, $params )
public function createConditionFromArray($condition)
{
if (isset($condition[0])) { // operator format: operator, operand 1, operand 2, ...
$operator = strtoupper(array_shift($condition));
if (isset($this->conditionClasses[$operator])) {
$className = $this->conditionClasses[$operator];
} else {
$className = 'yii\db\conditions\SimpleCondition';
}
/** @var ConditionInterface $className */
return $className::fromArrayDefinition($operator, $condition);
}
// hash format: 'column1' => 'value1', 'column2' => 'value2', ...
return new HashCondition($condition);
}
定義於: yii\db\QueryBuilder::createIndex()
建立 SQL 陳述式,用於建立新的索引。
public string createIndex ( $name, $table, $columns, $unique = false ) | ||
$typeMap public property | string |
索引的名稱。名稱將由此方法正確地加上引號。 |
public mixed __get ( $name ) | string |
將在其中建立新索引的表格。表格名稱將由此方法正確地加上引號。 |
public void __set ( $name, $value ) | $value |
應包含在索引中的欄位。如果有多個欄位,請用逗號分隔或使用陣列表示。除非在名稱中找到括號,否則每個欄位名稱都將由此方法正確地加上引號。 |
$unique | 公開方法 |
是否在新建立的索引上新增 UNIQUE 限制。 |
__call() public method | string |
用於建立新索引的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function createIndex($name, $table, $columns, $unique = false)
{
return ($unique ? 'CREATE UNIQUE INDEX ' : 'CREATE INDEX ')
. $this->db->quoteTableName($name) . ' ON '
. $this->db->quoteTableName($table)
. ' (' . $this->buildColumns($columns) . ')';
}
定義於: yii\db\QueryBuilder::createTable()
建立 SQL 陳述式,用於建立新的資料庫表格。
新表格中的欄位應指定為名稱-定義配對(例如 'name' => 'string'),其中 name 代表欄位名稱,將由此方法正確地加上引號,而 definition 代表欄位類型,必須包含抽象 DB 類型。getColumnType() 方法將被調用以將任何抽象類型轉換為實體類型。
如果僅使用定義指定欄位(例如 'PRIMARY KEY (name, type)'),它將直接插入到產生的 SQL 中。
例如,
$sql = $queryBuilder->createTable('user', [
'id' => 'pk',
'name' => 'string',
'age' => 'integer',
'column_name double precision null default null', # definition only example
]);
public string createTable ( $table, $columns, $options = null ) | ||
public mixed __get ( $name ) | string |
要建立的表格名稱。名稱將由此方法正確地加上引號。 |
public void __set ( $name, $value ) | array |
新表格中的欄位(名稱 => 定義)。 |
$options | 定義於: yii\base\BaseObject::__unset() |
將附加到產生的 SQL 的其他 SQL 片段。 |
__call() public method | string |
用於建立新 DB 表格的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function createTable($table, $columns, $options = null)
{
$cols = [];
foreach ($columns as $name => $type) {
if (is_string($name)) {
$cols[] = "\t" . $this->db->quoteColumnName($name) . ' ' . $this->getColumnType($type);
} else {
$cols[] = "\t" . $type;
}
}
$sql = 'CREATE TABLE ' . $this->db->quoteTableName($table) . " (\n" . implode(",\n", $cols) . "\n)";
return $options === null ? $sql : $sql . ' ' . $options;
}
定義於: yii\db\QueryBuilder::createView()
建立 SQL 視圖。
public string createView ( $viewName, $subQuery ) | ||
$viewName | string |
要建立的視圖名稱。 |
$subQuery | string|yii\db\Query |
定義視圖的 select 陳述式。這可以是字串或 yii\db\Query 物件。 |
__call() public method | string |
|
---|
public mixed __call ( $name, $params )
public function createView($viewName, $subQuery)
{
if ($subQuery instanceof Query) {
list($rawQuery, $params) = $this->build($subQuery);
array_walk(
$params,
function (&$param) {
$param = $this->db->quoteValue($param);
}
);
$subQuery = strtr($rawQuery, $params);
}
return 'CREATE VIEW ' . $this->db->quoteTableName($viewName) . ' AS ' . $subQuery;
}
定義於: yii\db\QueryBuilder::defaultConditionClasses()
defaultConditionClasses()
另請參閱 $conditionClasses。
protected array defaultConditionClasses ( ) |
public mixed __call ( $name, $params )
protected function defaultConditionClasses()
{
return [
'NOT' => 'yii\db\conditions\NotCondition',
'AND' => 'yii\db\conditions\AndCondition',
'OR' => 'yii\db\conditions\OrCondition',
'BETWEEN' => 'yii\db\conditions\BetweenCondition',
'NOT BETWEEN' => 'yii\db\conditions\BetweenCondition',
'IN' => 'yii\db\conditions\InCondition',
'NOT IN' => 'yii\db\conditions\InCondition',
'LIKE' => 'yii\db\conditions\LikeCondition',
'NOT LIKE' => 'yii\db\conditions\LikeCondition',
'OR LIKE' => 'yii\db\conditions\LikeCondition',
'OR NOT LIKE' => 'yii\db\conditions\LikeCondition',
'EXISTS' => 'yii\db\conditions\ExistsCondition',
'NOT EXISTS' => 'yii\db\conditions\ExistsCondition',
];
}
defaultExpressionBuilders()
protected array defaultExpressionBuilders ( ) |
public mixed __call ( $name, $params )
protected function defaultExpressionBuilders()
{
return array_merge(parent::defaultExpressionBuilders(), [
'yii\db\conditions\LikeCondition' => 'yii\db\cubrid\conditions\LikeConditionBuilder',
]);
}
定義於: yii\db\QueryBuilder::delete()
建立 DELETE SQL 陳述式。
例如,
$sql = $queryBuilder->delete('user', 'status = 0');
此方法將正確地跳脫處理表格和欄位名稱。
public string delete ( $table, $condition, &$params ) | ||
public mixed __get ( $name ) | string |
將從中刪除資料的表格。 |
$condition | array|string |
將放在 WHERE 部分的條件。請參閱 yii\db\Query::where() 以了解如何指定條件。 |
Method Details | array |
綁定參數將由此方法修改,以便稍後可以綁定到 DB 命令。 |
__call() public method | string |
DELETE SQL |
---|
public mixed __call ( $name, $params )
public function delete($table, $condition, &$params)
{
$sql = 'DELETE FROM ' . $this->db->quoteTableName($table);
$where = $this->buildWhere($condition, $params);
return $where === '' ? $sql : $sql . ' ' . $where;
}
建立 SQL 命令,用於刪除檢查約束。
public string dropCheck ( $name, $table ) | ||
$typeMap public property | string |
要刪除的 check 限制條件名稱。名稱將由此方法正確地加上引號。 |
public mixed __get ( $name ) | string |
要刪除 check 限制條件的表格。名稱將由此方法正確地加上引號。 |
__call() public method | string |
用於刪除 check 限制條件的 SQL 陳述式。 |
---|---|---|
定義於: yii\base\BaseObject::__call() | 屬性值 |
yii\base\UnknownPropertyException |
public mixed __call ( $name, $params )
public function dropCheck($name, $table)
{
throw new NotSupportedException(__METHOD__ . ' is not supported by CUBRID.');
}
定義於: yii\db\QueryBuilder::dropColumn()
建立 SQL 陳述式,用於刪除資料庫欄位。
public string dropColumn ( $table, $column ) | ||
public mixed __get ( $name ) | string |
要刪除欄位的表格。名稱將由此方法正確地加上引號。 |
yii\base\InvalidCallException | string |
要刪除的欄位名稱。名稱將由此方法正確地加上引號。 |
__call() public method | string |
用於刪除 DB 欄位的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function dropColumn($table, $column)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP COLUMN ' . $this->db->quoteColumnName($column);
}
建立 SQL 命令,用於新增欄位註解。
public string dropCommentFromColumn ( $table, $column ) | ||
public mixed __get ( $name ) | string |
Do not call this method directly as it is a PHP magic method that will be implicitly called when executing |
yii\base\InvalidCallException | string |
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 |
__call() public method | string |
See also https://php.dev.org.tw/manual/en/function.isset.php. |
---|
public mixed __call ( $name, $params )
public function dropCommentFromColumn($table, $column)
{
return $this->addCommentOnColumn($table, $column, '');
}
建立 SQL 命令,用於新增表格註解。
public string dropCommentFromTable ( $table ) | ||
public mixed __get ( $name ) | string |
Do not call this method directly as it is a PHP magic method that will be implicitly called when executing |
__call() public method | string |
See also https://php.dev.org.tw/manual/en/function.isset.php. |
---|
public mixed __call ( $name, $params )
public function dropCommentFromTable($table)
{
return $this->addCommentOnTable($table, '');
}
定義於: yii\db\QueryBuilder::dropDefaultValue()
建立 SQL 命令,用於刪除預設值約束。
public string dropDefaultValue ( $name, $table ) | ||
$typeMap public property | string |
要刪除的預設值限制條件名稱。名稱將由此方法正確地加上引號。 |
public mixed __get ( $name ) | string |
要刪除預設值限制條件的表格。名稱將由此方法正確地加上引號。 |
__call() public method | string |
用於刪除預設值限制條件的 SQL 陳述式。 |
---|---|---|
定義於: yii\base\BaseObject::__call() | 屬性值 |
Defined in: yii\base\BaseObject::__set() |
public mixed __call ( $name, $params )
public function dropDefaultValue($name, $table)
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support dropping default value constraints.');
}
定義於: yii\db\QueryBuilder::dropForeignKey()
建立 SQL 陳述式,用於刪除外鍵約束。
public string dropForeignKey ( $name, $table ) | ||
$typeMap public property | string |
要刪除的外鍵限制條件名稱。名稱將由此方法正確地加上引號。 |
public mixed __get ( $name ) | string |
要刪除外鍵的表格。名稱將由此方法正確地加上引號。 |
__call() public method | string |
用於刪除外鍵限制條件的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function dropForeignKey($name, $table)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}
建立 SQL 陳述式,用於刪除索引。
另請參閱 https://www.cubrid.org/manual/en/9.3.0/sql/schema/table.html#drop-index-clause。
public string dropIndex ( $name, $table ) | ||
$typeMap public property | string |
要刪除的索引名稱。名稱將由此方法正確地加上引號。 |
public mixed __get ( $name ) | string |
要刪除索引的表格。名稱將由此方法正確地加上引號。 |
__call() public method | string |
用於刪除索引的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function dropIndex($name, $table)
{
/** @var Schema $schema */
$schema = $this->db->getSchema();
foreach ($schema->getTableUniques($table) as $unique) {
if ($unique->name === $name) {
return $this->dropUnique($name, $table);
}
}
return 'DROP INDEX ' . $this->db->quoteTableName($name) . ' ON ' . $this->db->quoteTableName($table);
}
定義於: yii\db\QueryBuilder::dropPrimaryKey()
建立 SQL 陳述式,用於從現有表格中移除主鍵約束。
public string dropPrimaryKey ( $name, $table ) | ||
$typeMap public property | string |
要移除的主鍵限制條件名稱。 |
public mixed __get ( $name ) | string |
將從中移除主鍵限制條件的表格。 |
__call() public method | string |
用於從現有表格中移除主鍵限制條件的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function dropPrimaryKey($name, $table)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}
定義於: yii\db\QueryBuilder::dropTable()
建立 SQL 陳述式,用於刪除資料庫表格。
public string dropTable ( $table ) | ||
public mixed __get ( $name ) | string |
要刪除的表格。名稱將由此方法正確地加上引號。 |
__call() public method | string |
用於刪除 DB 表格的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function dropTable($table)
{
return 'DROP TABLE ' . $this->db->quoteTableName($table);
}
定義於: yii\db\QueryBuilder::dropUnique()
建立 SQL 命令,用於刪除唯一約束。
public string dropUnique ( $name, $table ) | ||
$typeMap public property | string |
要刪除的 unique 限制條件名稱。名稱將由此方法正確地加上引號。 |
public mixed __get ( $name ) | string |
要刪除 unique 限制條件的表格。名稱將由此方法正確地加上引號。 |
__call() public method | string |
用於刪除 unique 限制條件的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function dropUnique($name, $table)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}
定義於: yii\db\QueryBuilder::dropView()
刪除 SQL 視圖。
public string dropView ( $viewName ) | ||
$viewName | string |
要刪除的視圖名稱。 |
__call() public method | string |
|
---|
public mixed __call ( $name, $params )
public function dropView($viewName)
{
return 'DROP VIEW ' . $this->db->quoteTableName($viewName);
}
定義於: yii\db\QueryBuilder::executeResetSequence()
執行 SQL 陳述式,用於重設表格主鍵的序列值。
執行原因是因為某些資料庫 (Oracle) 需要多個查詢才能執行此操作。序列會被重設,以便下一個插入的新列的主鍵將具有指定的值或現有最大值 +1。
public void executeResetSequence ( $table, $value = null ) | ||
public mixed __get ( $name ) | string |
要重設主鍵序列的表格名稱 |
$config | array|string|null |
下一個插入的新列的主鍵值。如果未設定,則下一個新列的主鍵將具有現有最大值 +1。 |
定義於: yii\base\BaseObject::__call() | 屬性值 |
如果底層 DBMS 不支援此功能 |
---|
public mixed __call ( $name, $params )
public function executeResetSequence($table, $value = null)
{
$this->db->createCommand()->resetSequence($table, $value)->execute();
}
定義於: yii\db\QueryBuilder::extractAlias()
extractAlias()
protected boolean|array extractAlias ( $table ) | ||
public mixed __get ( $name ) |
public mixed __call ( $name, $params )
protected function extractAlias($table)
{
if (preg_match('/^(.*?)(?i:\s+as|)\s+([^ ]+)$/', $table, $matches)) {
return $matches;
}
return false;
}
定義於: yii\db\QueryBuilder::getColumnType()
將抽象欄位類型轉換為實體欄位類型。
轉換是使用 $typeMap 中指定的類型映射完成的。支援以下抽象欄位類型(使用 MySQL 作為範例來說明對應的實體類型)
pk
:自動遞增主鍵類型,將轉換為 "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY"bigpk
:自動遞增主鍵類型,將轉換為 "bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY"upk
:無符號自動遞增主鍵類型,將轉換為 "int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY"char
:char 類型,將轉換為 "char(1)"string
:string 類型,將轉換為 "varchar(255)"text
:長字串類型,將轉換為 "text"smallint
:小整數類型,將轉換為 "smallint(6)"integer
:整數類型,將轉換為 "int(11)"bigint
:大整數類型,將轉換為 "bigint(20)"boolean
:布林類型,將轉換為 "tinyint(1)"float
:浮點數類型,將轉換為 "float"decimal
:十進位數類型,將轉換為 "decimal"datetime
:datetime 類型,將轉換為 "datetime"timestamp
:timestamp 類型,將轉換為 "timestamp"time
:time 類型,將轉換為 "time"date
:date 類型,將轉換為 "date"money
:貨幣類型,將轉換為 "decimal(19,4)"binary
:二進位資料類型,將轉換為 "blob"
如果抽象類型包含兩個或多個以空格分隔的部分(例如 "string NOT NULL"),則僅轉換第一部分,其餘部分將附加到轉換結果。例如,'string NOT NULL' 會轉換為 'varchar(255) NOT NULL'。
對於某些抽象類型,您也可以透過在類型後面的圓括號中直接附加長度或精確度限制來指定。例如,string(32)
在 MySQL 資料庫上將轉換為 "varchar(32)"。如果底層 DBMS 不支援類型的這些限制,則會被忽略。
如果在 $typeMap 中找不到類型,則將不進行任何變更直接傳回。
public string getColumnType ( $type ) | ||
如果屬性為唯寫 | string|yii\db\ColumnSchemaBuilder |
抽象欄位類型 |
__call() public method | string |
實體欄位類型。 |
---|
public mixed __call ( $name, $params )
public function getColumnType($type)
{
if ($type instanceof ColumnSchemaBuilder) {
$type = $type->__toString();
}
if (isset($this->typeMap[$type])) {
return $this->typeMap[$type];
} elseif (preg_match('/^(\w+)\((.+?)\)(.*)$/', $type, $matches)) {
if (isset($this->typeMap[$matches[1]])) {
return preg_replace('/\(.+\)/', '(' . $matches[2] . ')', $this->typeMap[$matches[1]]) . $matches[3];
}
} elseif (preg_match('/^(\w+)\s+/', $type, $matches)) {
if (isset($this->typeMap[$matches[1]])) {
return preg_replace('/^\w+/', $this->typeMap[$matches[1]], $type);
}
}
return $type;
}
定義於: yii\db\QueryBuilder::getExpressionBuilder()
取得適用於 $expression 的 yii\db\ExpressionBuilderInterface 物件。
使用 $expressionBuilders 陣列來尋找合適的 builder 類別。
另請參閱 $expressionBuilders。
public yii\db\ExpressionBuilderInterface getExpressionBuilder ( yii\db\ExpressionInterface $expression ) | ||
The property name | yii\db\ExpressionInterface | |
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
當此 QueryBuilder 不支援 $expression 建構時。 |
---|
public mixed __call ( $name, $params )
public function getExpressionBuilder(ExpressionInterface $expression)
{
$className = get_class($expression);
if (!isset($this->expressionBuilders[$className])) {
foreach (array_reverse($this->expressionBuilders) as $expressionClass => $builderClass) {
if (is_subclass_of($expression, $expressionClass)) {
$this->expressionBuilders[$className] = $builderClass;
break;
}
}
if (!isset($this->expressionBuilders[$className])) {
throw new InvalidArgumentException('Expression of class ' . $className . ' can not be built in ' . get_class($this));
}
}
if ($this->expressionBuilders[$className] === __CLASS__) {
return $this;
}
if (!is_object($this->expressionBuilders[$className])) {
$this->expressionBuilders[$className] = new $this->expressionBuilders[$className]($this);
}
return $this->expressionBuilders[$className];
}
Defined in: yii\db\QueryBuilder::hasLimit()
hasLimit()
protected boolean hasLimit ( $limit ) | ||
$limit | 公開方法 |
給定的 limit |
__call() public method | 公開方法 |
Limit 是否有效 |
---|
public mixed __call ( $name, $params )
protected function hasLimit($limit)
{
return ($limit instanceof ExpressionInterface) || ctype_digit((string)$limit);
}
Defined in: yii\base\BaseObject::hasMethod()
傳回一個值,指示是否已定義方法。
預設實作是呼叫 php 函數 method_exists()
。當您實作 php 魔術方法 __call()
時,您可以覆寫此方法。
public boolean hasMethod ( $name ) | ||
$typeMap public property | string |
public array $typeMap = [ |
__call() public method | 公開方法 |
方法是否已定義 |
---|
public mixed __call ( $name, $params )
public function hasMethod($name)
{
return method_exists($this, $name);
}
Defined in: yii\db\QueryBuilder::hasOffset()
hasOffset()
protected boolean hasOffset ( $offset ) | ||
$offset | 公開方法 |
給定的 offset |
__call() public method | 公開方法 |
Offset 是否有效 |
---|
public mixed __call ( $name, $params )
protected function hasOffset($offset)
{
return ($offset instanceof ExpressionInterface) || ctype_digit((string)$offset) && (string)$offset !== '0';
}
Defined in: yii\base\BaseObject::hasProperty()
傳回一個值,指示是否已定義屬性。
如果符合以下條件,則屬性已定義:
- 類別具有與指定名稱相關聯的 getter 或 setter 方法(在這種情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱
public boolean hasProperty ( $name, $checkVars = true ) | ||
$typeMap public property | string |
mixed |
$checkVars | 公開方法 |
是否將成員變數視為屬性 |
__call() public method | 公開方法 |
屬性是否已定義 |
---|
public mixed __call ( $name, $params )
public function hasProperty($name, $checkVars = true)
{
return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}
public void init ( ) |
public mixed __call ( $name, $params )
public function init()
{
parent::init();
$this->expressionBuilders = array_merge($this->defaultExpressionBuilders(), $this->expressionBuilders);
$this->conditionClasses = array_merge($this->defaultConditionClasses(), $this->conditionClasses);
}
Defined in: yii\db\QueryBuilder::insert()
建立 INSERT SQL 陳述式。
例如, `
php $sql = $queryBuilder->insert('user', [
'name' => 'Sam',
'age' => 30,
], $params); `
此方法將正確地 escape 資料表和欄位名稱。
public string insert ( $table, $columns, &$params ) | ||
public mixed __get ( $name ) | string |
新列將被插入的資料表。 |
public void __set ( $name, $value ) | array|yii\db\Query |
要插入到資料表中的欄位資料(name => value)或 Query 的實例,以執行 INSERT INTO ... SELECT SQL 陳述式。Query 的傳遞自版本 2.0.11 起可用。 |
Method Details | array |
將由此方法產生的綁定參數。它們應在稍後綁定到 DB 命令。 |
__call() public method | string |
INSERT SQL |
---|
public mixed __call ( $name, $params )
public function insert($table, $columns, &$params)
{
list($names, $placeholders, $values, $params) = $this->prepareInsertValues($table, $columns, $params);
return 'INSERT INTO ' . $this->db->quoteTableName($table)
. (!empty($names) ? ' (' . implode(', ', $names) . ')' : '')
. (!empty($placeholders) ? ' VALUES (' . implode(', ', $placeholders) . ')' : $values);
}
Defined in: yii\db\QueryBuilder::prepareInsertSelectSubQuery()
prepareInsertSelectSubQuery()
protected array prepareInsertSelectSubQuery ( $columns, $schema, $params = [] ) | ||
public void __set ( $name, $value ) | yii\db\Query |
代表 select 查詢的物件。 |
$schema | yii\db\Schema |
Schema 物件,用於引用欄位名稱。 |
Method Details | array |
要綁定到產生的 SQL 陳述式的參數。這些參數將與查詢建構過程中產生的額外參數一起包含在結果中。 |
__call() public method | array |
欄位名稱、值和參數的陣列。 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
如果查詢的 select 不僅包含具名參數。 |
public mixed __call ( $name, $params )
protected function prepareInsertSelectSubQuery($columns, $schema, $params = [])
{
if (!is_array($columns->select) || empty($columns->select) || in_array('*', $columns->select)) {
throw new InvalidArgumentException('Expected select query object with enumerated (named) parameters');
}
list($values, $params) = $this->build($columns, $params);
$names = [];
$values = ' ' . $values;
foreach ($columns->select as $title => $field) {
if (is_string($title)) {
$names[] = $schema->quoteColumnName($title);
} elseif (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $field, $matches)) {
$names[] = $schema->quoteColumnName($matches[2]);
} else {
$names[] = $schema->quoteColumnName($field);
}
}
return [$names, $values, $params];
}
Defined in: yii\db\QueryBuilder::prepareInsertValues()
prepareInsertValues()
protected array prepareInsertValues ( $table, $columns, $params = [] ) | ||
public mixed __get ( $name ) | string |
新列將被插入的資料表。 |
public void __set ( $name, $value ) | array|yii\db\Query |
要插入到資料表中的欄位資料(name => value)或 Query 的實例,以執行 INSERT INTO ... SELECT SQL 陳述式。 |
Method Details | array |
將由此方法產生的綁定參數。它們應在稍後綁定到 DB 命令。 |
__call() public method | array |
欄位名稱、佔位符、值和參數的陣列。 |
---|
public mixed __call ( $name, $params )
protected function prepareInsertValues($table, $columns, $params = [])
{
$schema = $this->db->getSchema();
$tableSchema = $schema->getTableSchema($table);
$columnSchemas = $tableSchema !== null ? $tableSchema->columns : [];
$names = [];
$placeholders = [];
$values = ' DEFAULT VALUES';
if ($columns instanceof Query) {
list($names, $values, $params) = $this->prepareInsertSelectSubQuery($columns, $schema, $params);
} else {
foreach ($columns as $name => $value) {
$names[] = $schema->quoteColumnName($name);
$value = isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
if ($value instanceof ExpressionInterface) {
$placeholders[] = $this->buildExpression($value, $params);
} elseif ($value instanceof \yii\db\Query) {
list($sql, $params) = $this->build($value, $params);
$placeholders[] = "($sql)";
} else {
$placeholders[] = $this->bindParam($value, $params);
}
}
}
return [$names, $placeholders, $values, $params];
}
Defined in: yii\db\QueryBuilder::prepareUpdateSets()
prepareUpdateSets()
protected array prepareUpdateSets ( $table, $columns, $params = [] ) | ||
public mixed __get ( $name ) | string |
要更新的資料表。 |
public void __set ( $name, $value ) | array |
要更新的欄位資料(name => value)。 |
Method Details | array |
綁定參數將由此方法修改,以便稍後可以綁定到 DB 命令。 |
__call() public method | array |
用於 |
---|
public mixed __call ( $name, $params )
protected function prepareUpdateSets($table, $columns, $params = [])
{
$tableSchema = $this->db->getTableSchema($table);
$columnSchemas = $tableSchema !== null ? $tableSchema->columns : [];
$sets = [];
foreach ($columns as $name => $value) {
$value = isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
if ($value instanceof ExpressionInterface) {
$placeholder = $this->buildExpression($value, $params);
} else {
$placeholder = $this->bindParam($value, $params);
}
$sets[] = $this->db->quoteColumnName($name) . '=' . $placeholder;
}
return [$sets, $params];
}
Defined in: yii\db\QueryBuilder::prepareUpsertColumns()
protected array prepareUpsertColumns ( $table, $insertColumns, $updateColumns, &$constraints = [] ) | ||
public mixed __get ( $name ) | string | |
$insertColumns | array|yii\db\Query | |
$updateColumns | array|boolean | |
$constraints | yii\db\Constraint[] |
此參數接收一個匹配的約束列表。這些約束將依其欄位名稱為唯一。 |
public mixed __call ( $name, $params )
protected function prepareUpsertColumns($table, $insertColumns, $updateColumns, &$constraints = [])
{
if ($insertColumns instanceof Query) {
list($insertNames) = $this->prepareInsertSelectSubQuery($insertColumns, $this->db->getSchema());
} else {
$insertNames = array_map([$this->db, 'quoteColumnName'], array_keys($insertColumns));
}
$uniqueNames = $this->getTableUniqueColumnNames($table, $insertNames, $constraints);
$uniqueNames = array_map([$this->db, 'quoteColumnName'], $uniqueNames);
if ($updateColumns !== true) {
return [$uniqueNames, $insertNames, null];
}
return [$uniqueNames, $insertNames, array_diff($insertNames, $uniqueNames)];
}
Defined in: yii\db\QueryBuilder::renameColumn()
建立 SQL 陳述式,用於重新命名欄位。
public string renameColumn ( $table, $oldName, $newName ) | ||
public mixed __get ( $name ) | string |
要重新命名的欄位所在的資料表。名稱將由此方法正確地引用。 |
$oldName | string |
欄位的舊名稱。名稱將由此方法正確地引用。 |
$newName | string |
欄位的新名稱。名稱將由此方法正確地引用。 |
__call() public method | string |
用於重新命名 DB 欄位的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function renameColumn($table, $oldName, $newName)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' RENAME COLUMN ' . $this->db->quoteColumnName($oldName)
. ' TO ' . $this->db->quoteColumnName($newName);
}
Defined in: yii\db\QueryBuilder::renameTable()
建立 SQL 陳述式,用於重新命名資料庫表格。
public string renameTable ( $oldName, $newName ) | ||
$oldName | string |
要重新命名的資料表。名稱將由此方法正確地引用。 |
$newName | string |
資料表的新名稱。名稱將由此方法正確地引用。 |
__call() public method | string |
用於重新命名 DB 資料表的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function renameTable($oldName, $newName)
{
return 'RENAME TABLE ' . $this->db->quoteTableName($oldName) . ' TO ' . $this->db->quoteTableName($newName);
}
建立 SQL 陳述式,用於重設表格主鍵的序列值。
序列將被重置,以便下一個插入的新列的主鍵將具有指定的值或 1。
public string resetSequence ( $tableName, $value = null ) | ||
$tableName | string |
要重置主鍵序列的資料表名稱 |
$config | 公開方法 |
下一個插入的新列的主鍵值。如果未設定,則下一個新列的主鍵將具有值 1。 |
__call() public method | string |
用於重置序列的 SQL 陳述式 |
---|---|---|
定義於: yii\base\BaseObject::__call() | yii\base\InvalidArgumentException |
如果資料表不存在或沒有與資料表關聯的序列。 |
public mixed __call ( $name, $params )
public function resetSequence($tableName, $value = null)
{
$table = $this->db->getTableSchema($tableName);
if ($table !== null && $table->sequenceName !== null) {
$tableName = $this->db->quoteTableName($tableName);
if ($value === null) {
$key = reset($table->primaryKey);
$value = (int) $this->db->createCommand("SELECT MAX(`$key`) FROM " . $this->db->schema->quoteTableName($tableName))->queryScalar() + 1;
} else {
$value = (int) $value;
}
return 'ALTER TABLE ' . $this->db->schema->quoteTableName($tableName) . " AUTO_INCREMENT=$value;";
} elseif ($table === null) {
throw new InvalidArgumentException("Table not found: $tableName");
}
throw new InvalidArgumentException("There is not sequence associated with table '$tableName'.");
}
建立 SELECT EXISTS() SQL 陳述式。
public string selectExists ( $rawSql ) | ||
$rawSql | string |
原始格式的子查詢,用於從中選擇。 |
__call() public method | string |
SELECT EXISTS() SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function selectExists($rawSql)
{
return 'SELECT CASE WHEN EXISTS(' . $rawSql . ') THEN 1 ELSE 0 END';
}
Defined in: yii\db\QueryBuilder::setConditionClasses()
設定 $conditionClasses 屬性的 Setter。
另請參閱 $conditionClasses。
public void setConditionClasses ( $classes ) | ||
$classes | string[] |
條件別名到條件類別的映射。例如
|
public mixed __call ( $name, $params )
public function setConditionClasses($classes)
{
$this->conditionClasses = array_merge($this->conditionClasses, $classes);
}
Defined in: yii\db\QueryBuilder::setExpressionBuilders()
設定 $expressionBuilders 屬性的 Setter。
另請參閱 $expressionBuilders。
public void setExpressionBuilders ( $builders ) | ||
$builders | string[] |
應該與 $expressionBuilders 屬性中預定義的建構器合併的建構器陣列。 |
public mixed __call ( $name, $params )
public function setExpressionBuilders($builders)
{
$this->expressionBuilders = array_merge($this->expressionBuilders, $builders);
}
Defined in: yii\db\QueryBuilder::truncateTable()
建立 SQL 陳述式,用於截斷資料庫表格。
public string truncateTable ( $table ) | ||
public mixed __get ( $name ) | string |
要截斷的資料表。名稱將由此方法正確地引用。 |
__call() public method | string |
用於截斷 DB 資料表的 SQL 陳述式。 |
---|
public mixed __call ( $name, $params )
public function truncateTable($table)
{
return 'TRUNCATE TABLE ' . $this->db->quoteTableName($table);
}
Defined in: yii\db\QueryBuilder::update()
建立 UPDATE SQL 陳述式。
例如,
$params = [];
$sql = $queryBuilder->update('user', ['status' => 1], 'age > 30', $params);
此方法將正確地跳脫處理表格和欄位名稱。
public string update ( $table, $columns, $condition, &$params ) | ||
public mixed __get ( $name ) | string |
要更新的資料表。 |
public void __set ( $name, $value ) | array |
要更新的欄位資料(name => value)。 |
$condition | array|string |
將放在 WHERE 部分的條件。請參閱 yii\db\Query::where() 以了解如何指定條件。 |
Method Details | array |
綁定參數將由此方法修改,以便稍後可以綁定到 DB 命令。 |
__call() public method | string |
UPDATE SQL |
---|
public mixed __call ( $name, $params )
public function update($table, $columns, $condition, &$params)
{
list($lines, $params) = $this->prepareUpdateSets($table, $columns, $params);
$sql = 'UPDATE ' . $this->db->quoteTableName($table) . ' SET ' . implode(', ', $lines);
$where = $this->buildWhere($condition, $params);
return $where === '' ? $sql : $sql . ' ' . $where;
}
建立 SQL 陳述式,用於在資料庫表格中插入資料列(如果它們尚不存在,符合唯一約束),如果存在則更新它們。
例如,
$sql = $queryBuilder->upsert('pages', [
'name' => 'Front page',
'url' => 'https://example.com/', // url is unique
'visits' => 0,
], [
'visits' => new \yii\db\Expression('visits + 1'),
], $params);
此方法將正確地跳脫處理表格和欄位名稱。
另請參閱 https://www.cubrid.org/manual/en/9.3.0/sql/query/merge.html。
public string upsert ( $table, $insertColumns, $updateColumns, &$params ) | ||
public mixed __get ( $name ) | string |
新列將被插入/更新的資料表。 |
$insertColumns | array|yii\db\Query |
要插入到資料表中的欄位資料(name => value)或 yii\db\Query 的實例,以執行 |
$updateColumns | array|boolean |
如果欄位資料已存在,則要更新的欄位資料(name => value)。如果傳遞 |
Method Details | array |
將由此方法產生的綁定參數。它們應在稍後綁定到 DB 命令。 |
__call() public method | string |
產生的 SQL。 |
---|---|---|
定義於: yii\base\BaseObject::__call() | 屬性值 |
Defined in: yii\base\BaseObject::__set() |
public mixed __call ( $name, $params )
public function upsert($table, $insertColumns, $updateColumns, &$params)
{
/** @var Constraint[] $constraints */
list($uniqueNames, $insertNames, $updateNames) = $this->prepareUpsertColumns($table, $insertColumns, $updateColumns, $constraints);
if (empty($uniqueNames)) {
return $this->insert($table, $insertColumns, $params);
}
if ($updateNames === []) {
// there are no columns to update
$updateColumns = false;
}
$onCondition = ['or'];
$quotedTableName = $this->db->quoteTableName($table);
foreach ($constraints as $constraint) {
$constraintCondition = ['and'];
foreach ($constraint->columnNames as $name) {
$quotedName = $this->db->quoteColumnName($name);
$constraintCondition[] = "$quotedTableName.$quotedName=\"EXCLUDED\".$quotedName";
}
$onCondition[] = $constraintCondition;
}
$on = $this->buildCondition($onCondition, $params);
list(, $placeholders, $values, $params) = $this->prepareInsertValues($table, $insertColumns, $params);
$mergeSql = 'MERGE INTO ' . $this->db->quoteTableName($table) . ' '
. 'USING (' . (!empty($placeholders) ? 'VALUES (' . implode(', ', $placeholders) . ')' : ltrim($values, ' ')) . ') AS "EXCLUDED" (' . implode(', ', $insertNames) . ') '
. "ON ($on)";
$insertValues = [];
foreach ($insertNames as $name) {
$quotedName = $this->db->quoteColumnName($name);
if (strrpos($quotedName, '.') === false) {
$quotedName = '"EXCLUDED".' . $quotedName;
}
$insertValues[] = $quotedName;
}
$insertSql = 'INSERT (' . implode(', ', $insertNames) . ')'
. ' VALUES (' . implode(', ', $insertValues) . ')';
if ($updateColumns === false) {
return "$mergeSql WHEN NOT MATCHED THEN $insertSql";
}
if ($updateColumns === true) {
$updateColumns = [];
foreach ($updateNames as $name) {
$quotedName = $this->db->quoteColumnName($name);
if (strrpos($quotedName, '.') === false) {
$quotedName = '"EXCLUDED".' . $quotedName;
}
$updateColumns[$name] = new Expression($quotedName);
}
}
list($updates, $params) = $this->prepareUpdateSets($table, $updateColumns, $params);
$updateSql = 'UPDATE SET ' . implode(', ', $updates);
return "$mergeSql WHEN MATCHED THEN $updateSql WHEN NOT MATCHED THEN $insertSql";
}
註冊 或 登入 以進行評論。