0 关注者

类 yii\db\mssql\QueryBuilder

继承关系yii\db\mssql\QueryBuilder » yii\db\QueryBuilder » yii\base\BaseObject
实现接口yii\base\Configurable
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/mssql/QueryBuilder.php

QueryBuilder 是 MS SQL Server 数据库(版本 2008 及以上)的查询构建器。

公有属性

隐藏继承属性

属性 类型 描述 定义于
$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\mssql\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\mssql\QueryBuilder
addCommentOnTable() 构建用于向表添加注释的 SQL 命令。 yii\db\mssql\QueryBuilder
addDefaultValue() 创建用于向现有表添加默认值约束的 SQL 命令。 yii\db\mssql\QueryBuilder
addForeignKey() 构建用于向现有表添加外键约束的 SQL 语句。 yii\db\QueryBuilder
addPrimaryKey() 构建用于向现有表添加主键约束的 SQL 语句。 yii\db\QueryBuilder
addUnique() 创建用于向现有表添加唯一约束的 SQL 命令。 yii\db\QueryBuilder
alterColumn() 构建用于更改列定义的 SQL 语句。 yii\db\mssql\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\mssql\QueryBuilder
buildSelect() yii\db\QueryBuilder
buildSimpleCondition() 创建类似 "column" operator value 的 SQL 表达式。 yii\db\QueryBuilder
buildUnion() yii\db\QueryBuilder
buildWhere() yii\db\QueryBuilder
buildWithQueries() yii\db\QueryBuilder
canGetProperty() 返回一个值,指示属性是否可以读取。 yii\base\BaseObject
canSetProperty() 返回一个值,指示属性是否可以设置。 yii\base\BaseObject
checkIntegrity() 构建用于启用或禁用完整性检查的 SQL 语句。 yii\db\mssql\QueryBuilder
className() 返回此类的完全限定名称。 yii\base\BaseObject
createConditionFromArray() 将 $condition 转换为数组格式(如 yii\db\Query::where() 中所述)中定义的 yii\db\condition\ConditionInterface 的实例,根据 $conditionClasses 映射。 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() 在删除列之前删除所有约束 {@inheritdoc} yii\db\mssql\QueryBuilder
dropCommentFromColumn() 构建用于向列添加注释的 SQL 命令。 yii\db\mssql\QueryBuilder
dropCommentFromTable() 构建用于向表添加注释的 SQL 命令。 yii\db\mssql\QueryBuilder
dropDefaultValue() 创建用于删除默认值约束的 SQL 命令。 yii\db\mssql\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\mssql\QueryBuilder
getExpressionBuilder() 获取适合 $expression 的 yii\db\ExpressionBuilderInterface 对象。 yii\db\QueryBuilder
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\BaseObject
hasProperty() 返回一个值,指示属性是否已定义。 yii\base\BaseObject
init() 初始化对象。 yii\db\QueryBuilder
insert() {@inheritdoc} 添加 OUTPUT 结构以获取插入的数据(对于 SQL Server 2005 或更高版本)OUTPUT 子句 - OUTPUT 子句是 SQL Server 2005 的新增功能,它能够访问 INSERTED 和 DELETED 表,就像触发器一样。 yii\db\mssql\QueryBuilder
renameColumn() 构建用于重命名列的 SQL 语句。 yii\db\mssql\QueryBuilder
renameTable() 构建用于重命名数据库表的 SQL 语句。 yii\db\mssql\QueryBuilder
resetSequence() 创建用于重置表的 主键序列值的 SQL 语句。 yii\db\mssql\QueryBuilder
selectExists() 创建 SELECT EXISTS() SQL 语句。 yii\db\mssql\QueryBuilder
setConditionClasses() 用于 $conditionClasses 属性的 Setter。 yii\db\QueryBuilder
setExpressionBuilders() 用于 $expressionBuilders 属性的 Setter。 yii\db\QueryBuilder
truncateTable() 构建用于截断数据库表的 SQL 语句。 yii\db\QueryBuilder
update() 创建 UPDATE SQL 语句。 yii\db\mssql\QueryBuilder
upsert() 创建 SQL 语句,如果数据库表中不存在行(匹配唯一约束),则插入行,否则更新行。 yii\db\mssql\QueryBuilder

受保护方法

隐藏继承方法

方法 描述 定义于
buildAddCommentSql() 构建用于向表或列添加或更新注释的 SQL 命令。构建的命令将检查注释是否存在。如果存在,则更新它,否则添加它。 yii\db\mssql\QueryBuilder
buildRemoveCommentSql() 构建用于从表或列中删除注释的 SQL 命令。构建的命令将在尝试执行删除操作之前检查注释是否存在。 yii\db\mssql\QueryBuilder
defaultConditionClasses() 包含默认条件类的数组。如果要更改查询生成器的默认条件类,请扩展此方法。有关详细信息,请参阅 $conditionClasses 文档。 yii\db\QueryBuilder
defaultExpressionBuilders() 包含默认表达式生成器的数组。如果要更改此查询生成器的默认表达式生成器,请扩展此方法并覆盖它。有关详细信息,请参阅 $expressionBuilders 文档。 yii\db\mssql\QueryBuilder
extractAlias() 如果存在,则提取表别名,否则返回 false yii\db\mssql\QueryBuilder
getAllColumnNames() 给定模型名称返回列名称数组。 yii\db\mssql\QueryBuilder
hasLimit() 检查给定的限制是否有效。 yii\db\QueryBuilder
hasOffset() 检查给定的偏移量是否有效。 yii\db\QueryBuilder
isOldMssql() yii\db\mssql\QueryBuilder
newBuildOrderByAndLimit() 为 SQL SERVER 2012 或更高版本构建 ORDER BY/LIMIT/OFFSET 子句。 yii\db\mssql\QueryBuilder
oldBuildOrderByAndLimit() 为 SQL SERVER 2005 到 2008 构建 ORDER BY/LIMIT/OFFSET 子句。 yii\db\mssql\QueryBuilder
prepareInsertSelectSubQuery() 为 INSERT INTO ... SELECT SQL 语句准备 select-subquery 和字段名称。 yii\db\QueryBuilder
prepareInsertValues() INSERT SQL 语句准备 VALUES 部分。 yii\db\QueryBuilder
prepareUpdateSets() UPDATE SQL 语句准备 SET 部分。 yii\db\QueryBuilder
prepareUpsertColumns() yii\db\QueryBuilder

常量

隐藏继承的常量

常量 描述 定义于
PARAM_PREFIX ':qp' 自动生成的查询绑定参数的前缀。 yii\db\QueryBuilder

属性详细信息

隐藏继承属性

$typeMap 公共属性

抽象列类型(键)到物理列类型(值)的映射。

public array $typeMap = [
    \
yii\db\mssql\Schema::TYPE_PK => 'int IDENTITY PRIMARY KEY',
    \
yii\db\mssql\Schema::TYPE_UPK => 'int IDENTITY PRIMARY KEY',
    \
yii\db\mssql\Schema::TYPE_BIGPK => 'bigint IDENTITY PRIMARY KEY',
    \
yii\db\mssql\Schema::TYPE_UBIGPK => 'bigint IDENTITY PRIMARY KEY',
    \
yii\db\mssql\Schema::TYPE_CHAR => 'nchar(1)',
    \
yii\db\mssql\Schema::TYPE_STRING => 'nvarchar(255)',
    \
yii\db\mssql\Schema::TYPE_TEXT => 'nvarchar(max)',
    \
yii\db\mssql\Schema::TYPE_TINYINT => 'tinyint',
    \
yii\db\mssql\Schema::TYPE_SMALLINT => 'smallint',
    \
yii\db\mssql\Schema::TYPE_INTEGER => 'int',
    \
yii\db\mssql\Schema::TYPE_BIGINT => 'bigint',
    \
yii\db\mssql\Schema::TYPE_FLOAT => 'float',
    \
yii\db\mssql\Schema::TYPE_DOUBLE => 'float',
    \
yii\db\mssql\Schema::TYPE_DECIMAL => 'decimal(18,0)',
    \
yii\db\mssql\Schema::TYPE_DATETIME => 'datetime',
    \
yii\db\mssql\Schema::TYPE_TIMESTAMP => 'datetime',
    \
yii\db\mssql\Schema::TYPE_TIME => 'time',
    \
yii\db\mssql\Schema::TYPE_DATE => 'date',
    \
yii\db\mssql\Schema::TYPE_BINARY => 'varbinary(max)',
    \
yii\db\mssql\Schema::TYPE_BOOLEAN => 'bit',
    \
yii\db\mssql\Schema::TYPE_MONEY => 'decimal(19,4)',
]

方法详细信息

隐藏继承方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。

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

方法名

$params array

方法参数

返回值 mixed

方法的返回值

抛出 yii\base\UnknownMethodException

调用未知方法时

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

            
__construct() 公共方法

定义于: yii\db\QueryBuilder::__construct()

构造函数。

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

数据库连接。

$config array

用于初始化对象属性的名称-值对

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

            
__get() 公共方法

定义于: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $value = $object->property; 时会被隐式调用。

另见 __set()

public mixed __get ( $name )
$name string

属性名称

返回值 mixed

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 yii\base\InvalidCallException

如果属性为只写

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

            
__isset() 公共方法

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即定义且不为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 isset($object->property) 时会被隐式调用。

请注意,如果属性未定义,则会返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 布尔值

指定的属性是否已设置(非 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 string

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 yii\base\InvalidCallException

如果属性为只读

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

            
__unset() 公共方法

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($object->property) 时会被隐式调用。

请注意,如果属性未定义,则此方法将不执行任何操作。如果属性为只读,则会抛出异常。

另见 https://php.ac.cn/manual/en/function.unset.php

public void __unset ( $name )
$name string

属性名称

抛出 yii\base\InvalidCallException

如果属性为只读。

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

            
addCheck() 公共方法 (自版本 2.0.13 起可用)

定义于: yii\db\QueryBuilder::addCheck()

创建用于向现有表添加检查约束的 SQL 命令。

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

检查约束的名称。此方法将对名称进行正确引用。

$table string

将添加检查约束的表。此方法将对表名进行正确引用。

$expression string

CHECK 约束的 SQL。

返回值 string

向现有表添加检查约束的 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() 公共方法

定义于: yii\db\QueryBuilder::addColumn()

构建用于添加新数据库列的 SQL 语句。

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

将添加新列的表。此方法将对表名进行正确引用。

$column string

新列的名称。此方法将对列名进行正确引用。

$type string

列类型。将调用 getColumnType() 方法将抽象列类型(如果有)转换为物理列类型。任何未被识别为抽象类型的类型都将保留在生成的 SQL 中。例如,“string”将转换为“varchar(255)”,而“string not null”将转换为“varchar(255) not null”。

返回值 string

添加新列的 SQL 语句。

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

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

构建用于向列添加注释的 SQL 命令。

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

要对其列添加注释的表。此方法将对表名进行正确引用。

$column string

要对其添加注释的列的名称。此方法将对列名进行正确引用。

$comment string

要添加的注释文本。此方法将对注释进行正确引用。

返回值 string

添加列注释的 SQL 语句

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

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

构建用于向表添加注释的 SQL 命令。

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

要对其列添加注释的表。此方法将对表名进行正确引用。

$comment string

要添加的注释文本。此方法将对注释进行正确引用。

返回值 string

添加表注释的 SQL 语句

                public function addCommentOnTable($table, $comment)
{
    return $this->buildAddCommentSql($comment, $table);
}

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

创建用于向现有表添加默认值约束的 SQL 命令。

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

默认值约束的名称。此方法将对名称进行正确引用。

$table string

将添加默认值约束的表。此方法将对表名进行正确引用。

$column string

将向其添加约束的列的名称。此方法将对列名进行正确引用。

$value mixed

默认值。

返回值 string

向现有表添加默认值约束的 SQL 语句。

抛出 yii\base\NotSupportedException

如果底层 DBMS 不支持此操作。

                public function addDefaultValue($name, $table, $column, $value)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
        . $this->db->quoteColumnName($name) . ' DEFAULT ' . $this->db->quoteValue($value) . ' FOR '
        . $this->db->quoteColumnName($column);
}

            
addForeignKey() 公共方法

定义于: yii\db\QueryBuilder::addForeignKey()

构建用于向现有表添加外键约束的 SQL 语句。

此方法将对表名和列名进行正确引用。

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

外键约束的名称。

$table string

将添加外键约束的表。

$columns string|array

将添加约束的列的名称。如果有多个列,请用逗号分隔或使用数组表示它们。

$refTable string

外键引用的表。

$refColumns string|array

外键引用的列的名称。如果有多个列,请用逗号分隔或使用数组表示它们。

$delete string|null

ON DELETE 选项。大多数 DBMS 支持以下选项:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL

$update string|null

ON UPDATE 选项。大多数 DBMS 支持以下选项:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL

返回值 string

向现有表添加外键约束的 SQL 语句。

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

定义于: yii\db\QueryBuilder::addPrimaryKey()

构建用于向现有表添加主键约束的 SQL 语句。

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

主键约束的名称。

$table string

将添加主键约束的表。

$columns string|array

主键将由其组成的列的逗号分隔字符串或数组。

返回值 string

向现有表添加主键约束的 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 (available since version 2.0.13)

定义于: yii\db\QueryBuilder::addUnique()

创建用于向现有表添加唯一约束的 SQL 命令。

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

唯一约束的名称。该名称将由方法正确引用。

$table string

将添加唯一约束的表。该名称将由方法正确引用。

$columns string|array

将添加约束的列的名称。如果有多个列,请用逗号分隔。该名称将由方法正确引用。

返回值 string

向现有表添加唯一约束的 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 string

要更改其列的表。表名将由方法正确引用。

$column string

要更改的列的名称。该名称将由方法正确引用。

$type string

新的列类型。getColumnType() 方法将被调用以将抽象列类型(如果有)转换为物理列类型。任何未被识别为抽象类型的都将保留在生成的 SQL 中。例如,“string”将转换为“varchar(255)”,而“string not null”将变为“varchar(255) not null”。

返回值 string

更改列定义的 SQL 语句。

抛出 yii\base\NotSupportedException

如果底层 DBMS 不支持此操作。

                public function alterColumn($table, $column, $type)
{
    $sqlAfter = [$this->dropConstraintsForColumn($table, $column, 'D')];
    $columnName = $this->db->quoteColumnName($column);
    $tableName = $this->db->quoteTableName($table);
    $constraintBase = preg_replace('/[^a-z0-9_]/i', '', $table . '_' . $column);
    if ($type instanceof \yii\db\mssql\ColumnSchemaBuilder) {
        $type->setAlterColumnFormat();
        $defaultValue = $type->getDefaultValue();
        if ($defaultValue !== null) {
            $sqlAfter[] = $this->addDefaultValue(
                "DF_{$constraintBase}",
                $table,
                $column,
                $defaultValue instanceof Expression ? $defaultValue : new Expression($defaultValue)
            );
        }
        $checkValue = $type->getCheckValue();
        if ($checkValue !== null) {
            $sqlAfter[] = "ALTER TABLE {$tableName} ADD CONSTRAINT " .
                $this->db->quoteColumnName("CK_{$constraintBase}") .
                ' CHECK (' . ($defaultValue instanceof Expression ?  $checkValue : new Expression($checkValue)) . ')';
        }
        if ($type->isUnique()) {
            $sqlAfter[] = "ALTER TABLE {$tableName} ADD CONSTRAINT " . $this->db->quoteColumnName("UQ_{$constraintBase}") . " UNIQUE ({$columnName})";
        }
    }
    return 'ALTER TABLE ' . $tableName . ' ALTER COLUMN '
        . $columnName . ' '
        . $this->getColumnType($type) . "\n"
        . implode("\n", $sqlAfter);
}

            
batchInsert() public method

定义于: yii\db\QueryBuilder::batchInsert()

生成批处理 INSERT SQL 语句。

例如,

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

请注意,每行中的值必须与相应的列名匹配。

该方法将正确转义列名,并引用要插入的值。

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

将插入新行的表。

$columns array

列名

$rows array|Generator

要批量插入到表中的行

$params array

绑定参数。此参数自 2.0.14 版起存在

返回值 string

批量 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 (available since version 2.0.14)

定义于: yii\db\QueryBuilder::bindParam()

辅助方法,使用 PARAM_PREFIX 将 $value 添加到 $params 数组中。

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

按引用传递

返回值 string

$params 数组中的占位符名称

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

            
build() public method

定义于: yii\db\QueryBuilder::build()

yii\db\Query 对象生成 SELECT SQL 语句。

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

将从中生成 SQL 语句的 yii\db\Query 对象。

$params array

要绑定到生成的 SQL 语句的参数。这些参数将与在查询构建过程中生成的附加参数一起包含在结果中。

返回值 array

生成的 SQL 语句(第一个数组元素)以及要绑定到 SQL 语句的相应参数(第二个数组元素)。返回的参数包括 $params 中提供的参数。

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

            
buildAddCommentSql() protected method (available since version 2.0.24)

构建用于向表或列添加或更新注释的 SQL 命令。构建的命令将检查注释是否存在。如果存在,则更新它,否则添加它。

protected string buildAddCommentSql ( $comment, $table, $column null )
$comment string

要添加的注释文本。此方法将对注释进行正确引用。

$table string

要添加注释的表或其列。表名将由方法正确引用。

$column string|null

可选。要添加注释的列的名称。如果为空,则命令将改为向表添加注释。列名将由方法正确引用。

返回值 string

添加注释的 SQL 语句。

抛出 yii\base\InvalidArgumentException

如果表不存在。

                protected function buildAddCommentSql($comment, $table, $column = null)
{
    $tableSchema = $this->db->schema->getTableSchema($table);
    if ($tableSchema === null) {
        throw new InvalidArgumentException("Table not found: $table");
    }
    $schemaName = $tableSchema->schemaName ? "N'" . $tableSchema->schemaName . "'" : 'SCHEMA_NAME()';
    $tableName = 'N' . $this->db->quoteValue($tableSchema->name);
    $columnName = $column ? 'N' . $this->db->quoteValue($column) : null;
    $comment = 'N' . $this->db->quoteValue($comment);
    $functionParams = "
        @name = N'MS_description',
        @value = $comment,
        @level0type = N'SCHEMA', @level0name = $schemaName,
        @level1type = N'TABLE', @level1name = $tableName"
        . ($column ? ", @level2type = N'COLUMN', @level2name = $columnName" : '') . ';';
    return "
        IF NOT EXISTS (
                SELECT 1
                FROM fn_listextendedproperty (
                    N'MS_description',
                    'SCHEMA', $schemaName,
                    'TABLE', $tableName,
                    " . ($column ? "'COLUMN', $columnName " : ' DEFAULT, DEFAULT ') . "
                )
        )
            EXEC sys.sp_addextendedproperty $functionParams
        ELSE
            EXEC sys.sp_updateextendedproperty $functionParams
    ";
}

            
buildAndCondition() public method
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildAndCondition()

使用 ANDOR 运算符连接两个或多个 SQL 表达式。

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

用于连接给定操作数的操作符

$operands array

用于连接的 SQL 表达式。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

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

            
buildBetweenCondition() 公共方法
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildBetweenCondition()

创建使用 BETWEEN 运算符的 SQL 表达式。

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

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

$operands array

第一个操作数是列名。第二个和第三个操作数描述列值应该位于的区间。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

抛出 yii\base\InvalidArgumentException

如果提供了错误的操作数数量。

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

            
buildColumns() 公共方法

定义于: yii\db\QueryBuilder::buildColumns()

处理列,并在必要时正确地引用它们。

它将所有列连接成一个字符串,并以逗号作为分隔符。

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

要处理的列

返回值 string

处理结果

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

            
buildCondition() 公共方法

定义于: yii\db\QueryBuilder::buildCondition()

解析条件规范并生成相应的 SQL 表达式。

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

条件规范。请参考 yii\db\Query::where() 以了解如何指定条件。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

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

            
buildExistsCondition() 公共方法
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildExistsCondition()

创建使用 EXISTS 运算符的 SQL 表达式。

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

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

$operands array

仅包含一个元素,该元素是一个 yii\db\Query 对象,表示子查询。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

抛出 yii\base\InvalidArgumentException

如果操作数不是 yii\db\Query 对象。

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

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

要构建的表达式

$params array

要绑定到生成的 SQL 语句的参数。这些参数将包含在结果中,以及在表达式构建过程中生成的额外参数。

返回值 string

不会被引用或编码,然后传递给 DBMS 的 SQL 语句

抛出 yii\base\InvalidArgumentException

当此 QueryBuilder 不支持 $expression 构建时。

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

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

要填充的绑定参数

返回值 string

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

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

            
buildGroupBy() 公共方法
public string buildGroupBy ( $columns )
$columns array
返回值 string

GROUP BY 子句

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

            
buildHashCondition() 公共方法
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildHashCondition()

基于列-值对创建条件。

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

条件规范。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

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

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

要填充的绑定参数

返回值 string

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

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

            
buildInCondition() 公共方法
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildInCondition()

创建使用 IN 运算符的 SQL 表达式。

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

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

$operands array

第一个操作数是列名。如果它是一个数组,则会生成一个复合 IN 条件。第二个操作数是一个值数组,列值应该位于其中。如果它是一个空数组,则如果运算符为 IN,则生成的表达式将为 false 值,如果运算符为 NOT IN,则为空。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

抛出 yii\db\Exception

如果提供了错误的操作数数量。

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

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

要填充的绑定参数

返回值 string

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

抛出 yii\db\Exception

如果 $joins 参数格式不正确

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

            
buildLikeCondition() 公共方法
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildLikeCondition()

创建使用 LIKE 运算符的 SQL 表达式。

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

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

$operands array

包含两个或三个操作数的数组

  • 第一个操作数是列名。
  • 第二个操作数是单个值或一个数组,列值应该与之比较。如果它是一个空数组,则如果运算符为 LIKEOR LIKE,则生成的表达式将为 false 值,如果运算符为 NOT LIKEOR NOT LIKE,则为空。
  • 还可以提供一个可选的第三个操作数来指定如何转义值中的特殊字符。操作数应为一个数组,其中包含从特殊字符到其转义对应项的映射。如果未提供此操作数,则将使用默认的转义映射。您可以使用 false 或空数组来指示值已转义,并且不应应用转义。请注意,当使用转义映射(或未提供第三个操作数)时,值将自动用一对百分号括起来。
$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

抛出 yii\base\InvalidArgumentException

如果提供了错误的操作数数量。

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

            
buildLimit() 公共方法
public string buildLimit ( $limit, $offset )
$limit integer
$offset integer
返回值 string

LIMIT 和 OFFSET 子句

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

            
buildNotCondition() 公共方法
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildNotCondition()

使用 NOT 运算符反转 SQL 表达式。

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

用于连接给定操作数的操作符

$operands array

用于连接的 SQL 表达式。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

抛出 yii\base\InvalidArgumentException

如果提供了错误的操作数数量。

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

            
buildOrderBy() 公共方法
public string buildOrderBy ( $columns )
$columns array
返回值 string

根据 yii\db\Query::$orderBy 生成的 ORDER BY 子句。

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

            
buildOrderByAndLimit() 公共方法

构建 ORDER BY 和 LIMIT/OFFSET 子句并将它们附加到给定的 SQL 中。

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

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

$orderBy array

排序列。有关如何指定此参数的更多详细信息,请参阅 yii\db\Query::orderBy()

$limit integer

限制数量。有关更多详细信息,请参阅 yii\db\Query::limit()

$offset integer

偏移量。有关更多详细信息,请参阅 yii\db\Query::offset()

返回值 string

已完成的 SQL,包含 ORDER BY/LIMIT/OFFSET(如果有)

                public function buildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
    if (!$this->hasOffset($offset) && !$this->hasLimit($limit)) {
        $orderBy = $this->buildOrderBy($orderBy);
        return $orderBy === '' ? $sql : $sql . $this->separator . $orderBy;
    }
    if (version_compare($this->db->getSchema()->getServerVersion(), '11', '<')) {
        return $this->oldBuildOrderByAndLimit($sql, $orderBy, $limit, $offset);
    }
    return $this->newBuildOrderByAndLimit($sql, $orderBy, $limit, $offset);
}

            
buildRemoveCommentSql() 受保护方法 (自版本 2.0.24 起可用)

构建用于从表或列中删除注释的 SQL 命令。构建的命令将在尝试执行删除操作之前检查注释是否存在。

protected string buildRemoveCommentSql ( $table, $column null )
$table string

将从中删除注释的表或将从中删除注释的列的表。表名将由方法正确引用。

$column string|null

可选。将从中删除注释的列的名称。如果为空,则该命令将从表中删除注释。列名将由方法正确引用。

返回值 string

删除注释的 SQL 语句。

抛出 yii\base\InvalidArgumentException

如果表不存在。

                protected function buildRemoveCommentSql($table, $column = null)
{
    $tableSchema = $this->db->schema->getTableSchema($table);
    if ($tableSchema === null) {
        throw new InvalidArgumentException("Table not found: $table");
    }
    $schemaName = $tableSchema->schemaName ? "N'" . $tableSchema->schemaName . "'" : 'SCHEMA_NAME()';
    $tableName = 'N' . $this->db->quoteValue($tableSchema->name);
    $columnName = $column ? 'N' . $this->db->quoteValue($column) : null;
    return "
        IF EXISTS (
                SELECT 1
                FROM fn_listextendedproperty (
                    N'MS_description',
                    'SCHEMA', $schemaName,
                    'TABLE', $tableName,
                    " . ($column ? "'COLUMN', $columnName " : ' DEFAULT, DEFAULT ') . "
                )
        )
            EXEC sys.sp_dropextendedproperty
                @name = N'MS_description',
                @level0type = N'SCHEMA', @level0name = $schemaName,
                @level1type = N'TABLE', @level1name = $tableName"
                . ($column ? ", @level2type = N'COLUMN', @level2name = $columnName" : '') . ';';
}

            
buildSelect() 公共方法
public string buildSelect ( $columns, &$params, $distinct false, $selectOption null )
$columns array
$params array

要填充的绑定参数

$distinct 布尔值
$selectOption string|null
返回值 string

根据 yii\db\Query::$select 生成的 SELECT 子句。

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

            
buildSimpleCondition() 公共方法
自 2.0.14 版起已弃用。请改用 buildCondition()

定义于: yii\db\QueryBuilder::buildSimpleCondition()

创建类似 "column" operator value 的 SQL 表达式。

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

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

$operands array

包含两个列名。

$params array

要填充的绑定参数

返回值 string

生成的 SQL 表达式

抛出 yii\base\InvalidArgumentException

如果提供了错误的操作数数量。

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

            
buildUnion() 公共方法
public string buildUnion ( $unions, &$params )
$unions array
$params array

要填充的绑定参数

返回值 string

根据 yii\db\Query::$union 生成的 UNION 子句。

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

            
buildWhere() 公共方法
public string buildWhere ( $condition, &$params )
$condition string|array
$params array

要填充的绑定参数

返回值 string

根据 yii\db\Query::$where 生成的 WHERE 子句。

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

            
buildWithQueries() 公共方法 (自版本 2.0.35 起可用)
public 字符串 buildWithQueries ( $withs, &$params )
$withs array

每个 WITH 查询的配置

$params array

要填充的绑定参数

返回值 string

编译后的包含嵌套查询的 WITH 查询前缀

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

            
canGetProperty() 公共方法

定义于: yii\base\BaseObject::canGetProperty()

返回一个值,指示属性是否可以读取。

如果属性可读,则满足以下条件:

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参见 canSetProperty()

public 布尔值 canGetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否可读

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

            
canSetProperty() 公共方法

定义于: yii\base\BaseObject::canSetProperty()

返回一个值,指示属性是否可以设置。

如果属性可写,则满足以下条件:

  • 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参见 canGetProperty()

public 布尔值 canSetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否可写

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

            
checkIntegrity() 公共方法

构建用于启用或禁用完整性检查的 SQL 语句。

public 字符串 checkIntegrity ( $check true, $schema '', $table '' )
$check 布尔值

是否启用或禁用完整性检查。

$schema string

表的模式。

$table string

表名。

返回值 string

用于检查完整性的 SQL 语句

                public function checkIntegrity($check = true, $schema = '', $table = '')
{
    $enable = $check ? 'CHECK' : 'NOCHECK';
    $schema = $schema ?: $this->db->getSchema()->defaultSchema;
    $tableNames = $this->db->getTableSchema($table) ? [$table] : $this->db->getSchema()->getTableNames($schema);
    $viewNames = $this->db->getSchema()->getViewNames($schema);
    $tableNames = array_diff($tableNames, $viewNames);
    $command = '';
    foreach ($tableNames as $tableName) {
        $tableName = $this->db->quoteTableName("{$schema}.{$tableName}");
        $command .= "ALTER TABLE $tableName $enable CONSTRAINT ALL; ";
    }
    return $command;
}

            
className() 公共静态方法
自 2.0.14 版本起已弃用。在 PHP >=5.5 中,请使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static 字符串 className ( )
返回值 string

此类的完全限定名称。

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

            
createConditionFromArray() 公共方法(自 2.0.14 版本起可用)

定义于: yii\db\QueryBuilder::createConditionFromArray()

将 $condition 转换为数组格式(如 yii\db\Query::where() 中所述)中定义的 yii\db\condition\ConditionInterface 的实例,根据 $conditionClasses 映射。

另请参见 $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() 公共方法

定义于: yii\db\QueryBuilder::createIndex()

构建用于创建新索引的 SQL 语句。

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

索引的名称。该名称将由方法正确引用。

$table string

将为其创建新索引的表。表名将由方法正确引用。

$columns string|array

应包含在索引中的列。如果有多个列,请用逗号分隔或使用数组表示它们。每个列名将由方法正确引用,除非名称中找到括号。

$unique 布尔值

是否在创建的索引上添加 UNIQUE 约束。

返回值 string

创建新索引的 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() 公共方法

定义于: yii\db\QueryBuilder::createTable()

构建用于创建新数据库表的 SQL 语句。

新表中的列应指定为名称-定义对(例如“name”=>“string”),其中名称代表列名,该名称将由方法正确引用,定义代表列类型,该类型必须包含抽象的 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 字符串 createTable ( $table, $columns, $options null )
$table string

要创建的表名。该名称将由方法正确引用。

$columns array

新表中的列(name => definition)。

$options string|null

将附加到生成的 SQL 的其他 SQL 片段。

返回值 string

创建新的 DB 表的 SQL 语句。

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

            
createView() 公共方法(自 2.0.14 版本起可用)

定义于: yii\db\QueryBuilder::createView()

创建 SQL 视图。

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

要创建的视图的名称。

$subQuery 字符串|yii\db\Query

定义视图的 select 语句。这可以是字符串或 yii\db\Query 对象。

返回值 string

CREATE VIEW SQL 语句。

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

            
defaultConditionClasses() 受保护的方法(自 2.0.14 版本起可用)

定义于: yii\db\QueryBuilder::defaultConditionClasses()

包含默认条件类的数组。如果要更改查询生成器的默认条件类,请扩展此方法。有关详细信息,请参阅 $conditionClasses 文档。

另请参见 $conditionClasses

protected 数组 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() 受保护的方法(自 2.0.14 版本起可用)

包含默认表达式生成器的数组。如果要更改此查询生成器的默认表达式生成器,请扩展此方法并覆盖它。有关详细信息,请参阅 $expressionBuilders 文档。

受保护 数组 defaultExpressionBuilders ( )

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

            
delete() 公共方法

定义于: yii\db\QueryBuilder::delete()

创建 DELETE SQL 语句。

例如,

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

此方法将正确转义表名和列名。

公共 字符串 delete ( $table, $condition, &$params )
$table string

将从中删除数据的表。

$condition 数组|字符串

将放在 WHERE 部分的条件。请参阅 yii\db\Query::where() 以了解如何指定条件。

$params array

将由此方法修改的绑定参数,以便稍后可以将其绑定到数据库命令。

返回值 string

DELETE SQL 语句

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

            
dropCheck() 公共方法 (自版本 2.0.13 起可用)

定义于: yii\db\QueryBuilder::dropCheck()

创建用于删除检查约束的 SQL 命令。

公共 字符串 dropCheck ( $name, $table )
$name string

要删除的检查约束的名称。此方法将正确引用名称。

$table string

要删除其检查约束的表。此方法将正确引用名称。

返回值 string

删除检查约束的 SQL 语句。

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

            
dropColumn() 公共方法

在删除列之前删除所有约束 {@inheritdoc}

公共 dropColumn ( $table, $column )
$table
$column

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

            
dropCommentFromColumn() 公共方法 (自版本 2.0.8 起可用)

构建用于向列添加注释的 SQL 命令。

公共 字符串 dropCommentFromColumn ( $table, $column )
$table string

要对其列添加注释的表。此方法将对表名进行正确引用。

$column string

要对其添加注释的列的名称。此方法将对列名进行正确引用。

返回值 string

添加列注释的 SQL 语句

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

            
dropCommentFromTable() 公共方法 (自版本 2.0.8 起可用)

构建用于向表添加注释的 SQL 命令。

公共 字符串 dropCommentFromTable ( $table )
$table string

要对其列添加注释的表。此方法将对表名进行正确引用。

返回值 string

添加列注释的 SQL 语句

                public function dropCommentFromTable($table)
{
    return $this->buildRemoveCommentSql($table);
}

            
dropDefaultValue() 公共方法 (自版本 2.0.13 起可用)

创建用于删除默认值约束的 SQL 命令。

公共 字符串 dropDefaultValue ( $name, $table )
$name string

要删除的默认值约束的名称。此方法将正确引用名称。

$table string

要删除其默认值约束的表。此方法将正确引用名称。

返回值 string

删除默认值约束的 SQL 语句。

抛出 yii\base\NotSupportedException

如果底层 DBMS 不支持此操作。

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

            
dropForeignKey() 公共方法

定义于: yii\db\QueryBuilder::dropForeignKey()

构建用于删除外键约束的 SQL 语句。

公共 字符串 dropForeignKey ( $name, $table )
$name string

要删除的外键约束的名称。此方法将正确引用名称。

$table string

要删除其外键的表。此方法将正确引用名称。

返回值 string

删除外键约束的 SQL 语句。

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

            
dropIndex() 公共方法

定义于: yii\db\QueryBuilder::dropIndex()

构建用于删除索引的 SQL 语句。

公共 字符串 dropIndex ( $name, $table )
$name string

要删除的索引的名称。此方法将正确引用名称。

$table string

要删除其索引的表。此方法将正确引用名称。

返回值 string

删除索引的 SQL 语句。

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

            
dropPrimaryKey() 公共方法

定义于: yii\db\QueryBuilder::dropPrimaryKey()

构建用于删除现有表的主键约束的 SQL 语句。

公共 字符串 dropPrimaryKey ( $name, $table )
$name string

要删除的主键约束的名称。

$table string

将从中删除主键约束的表。

返回值 string

从现有表中删除主键约束的 SQL 语句。

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

            
dropTable() 公共方法

定义于: yii\db\QueryBuilder::dropTable()

构建用于删除数据库表的 SQL 语句。

公共 字符串 dropTable ( $table )
$table string

要删除的表。此方法将正确引用名称。

返回值 string

删除数据库表的 SQL 语句。

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

            
dropUnique() 公共方法 (自版本 2.0.13 起可用)

定义于: yii\db\QueryBuilder::dropUnique()

创建用于删除唯一约束的 SQL 命令。

公共 字符串 dropUnique ( $name, $table )
$name string

要删除的唯一约束的名称。此方法将正确引用名称。

$table string

要删除其唯一约束的表。此方法将正确引用名称。

返回值 string

删除唯一约束的 SQL 语句。

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

            
dropView() 公共方法 (自版本 2.0.14 起可用)

定义于: yii\db\QueryBuilder::dropView()

删除 SQL 视图。

公共 字符串 dropView ( $viewName )
$viewName string

要删除的视图的名称。

返回值 string

DROP VIEW SQL 语句。

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

            
executeResetSequence() 公共方法 (自版本 2.0.16 起可用)

定义于: yii\db\QueryBuilder::executeResetSequence()

执行用于重置表的 主键序列值的 SQL 语句。

执行的原因是某些数据库(例如 Oracle)需要多个查询才能完成此操作。序列将重置,以便插入的下一行新行的主键将具有指定的值或最大现有值 +1。

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

要重置主键序列的表的名称

$value 数组|字符串|

插入的下一行新行的主键的值。如果未设置此值,则下一行新行的主键将具有最大现有值 +1。

抛出 yii\base\NotSupportedException

如果底层 DBMS 不支持此功能

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

            
extractAlias() 受保护方法 (自版本 2.0.24 起可用)

如果存在,则提取表别名,否则返回 false

protected 布尔值|数组 extractAlias ( $table )
$table

                protected function extractAlias($table)
{
    if (preg_match('/^\[.*\]$/', $table)) {
        return false;
    }
    return parent::extractAlias($table);
}

            
getAllColumnNames() 受保护方法

给定模型名称返回列名称数组。

protected 数组| getAllColumnNames ( $modelClass null )
$modelClass string|null

模型类的名称

返回值 数组|

列名称数组

                protected function getAllColumnNames($modelClass = null)
{
    if (!$modelClass) {
        return null;
    }
    /* @var $modelClass \yii\db\ActiveRecord */
    $schema = $modelClass::getTableSchema();
    return array_keys($schema->columns);
}

            
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(1)”
  • string:字符串类型,将转换为“varchar(255)”
  • text:长字符串类型,将转换为“text”
  • smallint:小整数类型,将转换为“smallint(6)”
  • integer:整数类型,将转换为“int(11)”
  • bigint:大整数类型,将转换为“bigint(20)”
  • boolean:布尔类型,将转换为“tinyint(1)”
  • float`: 浮点数类型,将转换为“float”
  • decimal:十进制数类型,将转换为“decimal”
  • datetime:日期时间类型,将转换为“datetime”
  • timestamp:时间戳类型,将转换为“timestamp”
  • time:时间类型,将转换为“time”
  • 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 字符串 getColumnType ( $type )
$type 字符串|yii\db\ColumnSchemaBuilder

抽象列类型

返回值 string

物理列类型。

                public function getColumnType($type)
{
    $columnType = parent::getColumnType($type);
    // remove unsupported keywords
    $columnType = preg_replace("/\s*comment '.*'/i", '', $columnType);
    $columnType = preg_replace('/ first$/i', '', $columnType);
    return $columnType;
}

            
getExpressionBuilder() 公共方法 (自版本 2.0.14 起可用)

定义于: yii\db\QueryBuilder::getExpressionBuilder()

获取适合 $expression 的 yii\db\ExpressionBuilderInterface 对象。

使用 $expressionBuilders 数组查找合适的构建器类。

另请参阅 $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() 受保护方法

定义于: yii\db\QueryBuilder::hasLimit()

检查给定的限制是否有效。

protected 布尔值 hasLimit ( $limit )
$limit mixed

给定的限制

返回值 布尔值

限制是否有效

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

            
hasMethod() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示方法是否已定义。

默认实现是调用 php 函数 method_exists()。当您实现 php 魔术方法 __call() 时,您可以重写此方法。

public 布尔值 hasMethod ( $name )
$name string

方法名

返回值 布尔值

方法是否已定义

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

            
hasOffset() 受保护方法

定义于: yii\db\QueryBuilder::hasOffset()

检查给定的偏移量是否有效。

protected 布尔值 hasOffset ( $offset )
$offset mixed

给定的偏移量

返回值 布尔值

偏移量是否有效

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

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示属性是否已定义。

如果属性已定义,则

  • 类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅

public 布尔值 hasProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否已定义

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

            
init() 公共方法

定义于: yii\db\QueryBuilder::init()

初始化对象。

此方法在构造函数结束后被调用,此时对象已使用给定的配置进行了初始化。

public void init ( )

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

            
insert() 公共方法

{@inheritdoc} 添加 OUTPUT 结构以获取插入的数据(对于 SQL Server 2005 或更高版本)OUTPUT 子句 - OUTPUT 子句是 SQL Server 2005 的新增功能,它能够访问 INSERTED 和 DELETED 表,就像触发器一样。

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

                public function insert($table, $columns, &$params)
{
    $columns = $this->normalizeTableRowData($table, $columns, $params);
    $version2005orLater = version_compare($this->db->getSchema()->getServerVersion(), '9', '>=');
    list($names, $placeholders, $values, $params) = $this->prepareInsertValues($table, $columns, $params);
    $cols = [];
    $outputColumns = [];
    if ($version2005orLater) {
        /* @var $schema TableSchema */
        $schema = $this->db->getTableSchema($table);
        foreach ($schema->columns as $column) {
            if ($column->isComputed) {
                continue;
            }
            $dbType = $column->dbType;
            if (in_array($dbType, ['char', 'varchar', 'nchar', 'nvarchar', 'binary', 'varbinary'])) {
                $dbType .= '(MAX)';
            }
            if ($column->dbType === Schema::TYPE_TIMESTAMP) {
                $dbType = $column->allowNull ? 'varbinary(8)' : 'binary(8)';
            }
            $quoteColumnName = $this->db->quoteColumnName($column->name);
            $cols[] = $quoteColumnName . ' ' . $dbType . ' ' . ($column->allowNull ? 'NULL' : '');
            $outputColumns[] = 'INSERTED.' . $quoteColumnName;
        }
    }
    $countColumns = count($outputColumns);
    $sql = 'INSERT INTO ' . $this->db->quoteTableName($table)
        . (!empty($names) ? ' (' . implode(', ', $names) . ')' : '')
        . (($version2005orLater && $countColumns) ? ' OUTPUT ' . implode(',', $outputColumns) . ' INTO @temporary_inserted' : '')
        . (!empty($placeholders) ? ' VALUES (' . implode(', ', $placeholders) . ')' : $values);
    if ($version2005orLater && $countColumns) {
        $sql = 'SET NOCOUNT ON;DECLARE @temporary_inserted TABLE (' . implode(', ', $cols) . ');' . $sql .
            ';SELECT * FROM @temporary_inserted';
    }
    return $sql;
}

            
isOldMssql() 受保护方法
自版本 2.0.14 起已弃用:请使用 yii\db\mssql\Schema::getServerVersion()\version_compare()

protected boolean isOldMssql ( )
返回值 布尔值

判断所使用的 MSSQL 版本是否早于 2012。

抛出 yii\base\InvalidConfigException
抛出 yii\db\Exception

                protected function isOldMssql()
{
    return version_compare($this->db->getSchema()->getServerVersion(), '11', '<');
}

            
newBuildOrderByAndLimit() 受保护方法

为 SQL SERVER 2012 或更高版本构建 ORDER BY/LIMIT/OFFSET 子句。

protected string newBuildOrderByAndLimit ( $sql, $orderBy, $limit, $offset )
$sql string

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

$orderBy array

排序列。有关如何指定此参数的更多详细信息,请参阅 yii\db\Query::orderBy()

$limit integer

限制数量。有关更多详细信息,请参阅 yii\db\Query::limit()

$offset integer

偏移量。有关更多详细信息,请参阅 yii\db\Query::offset()

返回值 string

已完成的 SQL,包含 ORDER BY/LIMIT/OFFSET(如果有)

                protected function newBuildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
    $orderBy = $this->buildOrderBy($orderBy);
    if ($orderBy === '') {
        // ORDER BY clause is required when FETCH and OFFSET are in the SQL
        $orderBy = 'ORDER BY (SELECT NULL)';
    }
    $sql .= $this->separator . $orderBy;
    // http://technet.microsoft.com/en-us/library/gg699618.aspx
    $offset = $this->hasOffset($offset) ? $offset : '0';
    $sql .= $this->separator . "OFFSET $offset ROWS";
    if ($this->hasLimit($limit)) {
        $sql .= $this->separator . "FETCH NEXT $limit ROWS ONLY";
    }
    return $sql;
}

            
oldBuildOrderByAndLimit() 受保护方法

为 SQL SERVER 2005 到 2008 构建 ORDER BY/LIMIT/OFFSET 子句。

protected string oldBuildOrderByAndLimit ( $sql, $orderBy, $limit, $offset )
$sql string

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

$orderBy array

排序列。有关如何指定此参数的更多详细信息,请参阅 yii\db\Query::orderBy()

$limit integer|yii\db\Expression

限制数量。有关更多详细信息,请参阅 yii\db\Query::limit()

$offset integer

偏移量。有关更多详细信息,请参阅 yii\db\Query::offset()

返回值 string

已完成的 SQL,包含 ORDER BY/LIMIT/OFFSET(如果有)

                protected function oldBuildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
    $orderBy = $this->buildOrderBy($orderBy);
    if ($orderBy === '') {
        // ROW_NUMBER() requires an ORDER BY clause
        $orderBy = 'ORDER BY (SELECT NULL)';
    }
    $sql = preg_replace('/^([\s(])*SELECT(\s+DISTINCT)?(?!\s*TOP\s*\()/i', "\\1SELECT\\2 rowNum = ROW_NUMBER() over ($orderBy),", $sql);
    if ($this->hasLimit($limit)) {
        if ($limit instanceof Expression) {
            $limit = '(' . (string)$limit . ')';
        }
        $sql = "SELECT TOP $limit * FROM ($sql) sub";
    } else {
        $sql = "SELECT * FROM ($sql) sub";
    }
    if ($this->hasOffset($offset)) {
        $sql .= $this->separator . "WHERE rowNum > $offset";
    }
    return $sql;
}

            
prepareInsertSelectSubQuery() 受保护方法 (自版本 2.0.11 起可用)

定义于: yii\db\QueryBuilder::prepareInsertSelectSubQuery()

为 INSERT INTO ... SELECT SQL 语句准备 select-subquery 和字段名称。

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

表示选择查询的对象。

$schema yii\db\Schema

用于引用列名的 Schema 对象。

$params array

要绑定到生成的 SQL 语句的参数。这些参数将与在查询构建过程中生成的附加参数一起包含在结果中。

返回值 array

列名、值和参数的数组。

抛出 yii\base\InvalidArgumentException

如果查询的选择不包含仅命名的参数。

                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() 受保护方法 (自版本 2.0.14 起可用)

定义于: yii\db\QueryBuilder::prepareInsertValues()

INSERT SQL 语句准备 VALUES 部分。

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

将插入新行的表。

$columns array|yii\db\Query

要插入到表中的列数据(名称 => 值)或 Query 实例,用于执行 INSERT INTO ... SELECT SQL 语句。

$params array

此方法将生成的绑定参数。稍后应将其绑定到数据库命令。

返回值 array

列名、占位符、值和参数的数组。

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

            
prepareUpdateSets() 受保护方法 (自版本 2.0.14 起可用)

定义于: yii\db\QueryBuilder::prepareUpdateSets()

UPDATE SQL 语句准备 SET 部分。

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

要更新的表。

$columns array

要更新的列数据(名称 => 值)。

$params array

将由此方法修改的绑定参数,以便稍后可以将其绑定到数据库命令。

返回值 array

用于 UPDATE SQL 语句的 SET 部分数组(第一个数组元素)和参数(第二个数组元素)。

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

            
prepareUpsertColumns() 受保护方法 (自版本 2.0.14 起可用)
protected array prepareUpsertColumns ( $table, $insertColumns, $updateColumns, &$constraints = [] )
$table string
$insertColumns array|yii\db\Query
$updateColumns array|boolean
$constraints yii\db\Constraint[]

此参数接收匹配的约束列表。约束将按其列名唯一。

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

            
renameColumn() 公共方法

构建用于重命名列的 SQL 语句。

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

要重命名其列的表。名称将由方法正确引用。

$oldName string

列的旧名称。名称将由方法正确引用。

$newName string

列的新名称。名称将由方法正确引用。

返回值 string

重命名数据库列的 SQL 语句。

                public function renameColumn($table, $oldName, $newName)
{
    $table = $this->db->quoteTableName($table);
    $oldName = $this->db->quoteColumnName($oldName);
    $newName = $this->db->quoteColumnName($newName);
    return "sp_rename '{$table}.{$oldName}', {$newName}, 'COLUMN'";
}

            
renameTable() 公共方法

构建用于重命名数据库表的 SQL 语句。

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

要重命名的表。名称将由方法正确引用。

$newName string

新的表名。名称将由方法正确引用。

返回值 string

重命名数据库表的 SQL 语句。

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

            
resetSequence() 公共方法

创建用于重置表的 主键序列值的 SQL 语句。

序列将被重置,以便插入的下一行新行的主键将具有指定的值或 1。

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

要重置其主键序列的表的名称

$value mixed

插入的下一行新行的主键的值。如果未设置此值,则下一行新行的主键将具有值 1。

返回值 string

重置序列的 SQL 语句

抛出 yii\base\InvalidArgumentException

如果表不存在或没有与表关联的序列。

                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 = $this->db->quoteColumnName(reset($table->primaryKey));
            $value = "(SELECT COALESCE(MAX({$key}),0) FROM {$tableName})+1";
        } else {
            $value = (int) $value;
        }
        return "DBCC CHECKIDENT ('{$tableName}', RESEED, {$value})";
    } elseif ($table === null) {
        throw new InvalidArgumentException("Table not found: $tableName");
    }
    throw new InvalidArgumentException("There is not sequence associated with table '$tableName'.");
}

            
selectExists() 公共方法 (自版本 2.0.8 起可用)

创建 SELECT EXISTS() SQL 语句。

public string selectExists ( $rawSql )
$rawSql string

以原始形式进行选择的子查询。

返回值 string

SELECT EXISTS() SQL 语句。

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

            
setConditionClasses() 公共方法 (自版本 2.0.14.2 起可用)

定义于: yii\db\QueryBuilder::setConditionClasses()

用于 $conditionClasses 属性的 Setter。

另请参见 $conditionClasses

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

条件别名到条件类的映射。例如

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

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

            
setExpressionBuilders() 公共方法 (自版本 2.0.14 起可用)

定义于: yii\db\QueryBuilder::setExpressionBuilders()

用于 $expressionBuilders 属性的 Setter。

另请参阅 $expressionBuilders

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

应该与 $expressionBuilders 属性中预定义的构建器合并的构建器数组。

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

            
truncateTable() 公共方法

定义于: yii\db\QueryBuilder::truncateTable()

构建用于截断数据库表的 SQL 语句。

public string truncateTable ( $table )
$table string

要截断的表。该名称将由方法正确引用。

返回值 string

用于截断数据库表的 SQL 语句。

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

            
update() 公共方法

创建 UPDATE SQL 语句。

例如,

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

此方法将正确转义表名和列名。

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

要更新的表。

$columns array

要更新的列数据(名称 => 值)。

$condition 数组|字符串

将放在 WHERE 部分的条件。请参阅 yii\db\Query::where() 以了解如何指定条件。

$params array

将由此方法修改的绑定参数,以便稍后可以将其绑定到数据库命令。

返回值 string

UPDATE SQL

                public function update($table, $columns, $condition, &$params)
{
    return parent::update($table, $this->normalizeTableRowData($table, $columns, $params), $condition, $params);
}

            
upsert() 公共方法 (自版本 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 string

将插入新行或更新其中的表。

$insertColumns array|yii\db\Query

要插入表中的列数据(名称 => 值),或 yii\db\Query 的实例以执行 INSERT INTO ... SELECT SQL 语句。

$updateColumns array|boolean

如果列数据已存在,则要更新的列数据(名称 => 值)。如果传递 true,则列数据将更新以匹配插入列数据。如果传递 false,则如果列数据已存在,则不会执行更新。

$params array

此方法将生成的绑定参数。稍后应将其绑定到数据库命令。

返回值 string

生成的 SQL。

抛出 yii\base\NotSupportedException

如果底层 DBMS 不支持此操作。

                public function upsert($table, $insertColumns, $updateColumns, &$params)
{
    $insertColumns = $this->normalizeTableRowData($table, $insertColumns, $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);
    /**
     * Fix number of select query params for old MSSQL version that does not support offset correctly.
     * @see QueryBuilder::oldBuildOrderByAndLimit
     */
    $insertNamesUsing = $insertNames;
    if (strstr($values, 'rowNum = ROW_NUMBER()') !== false) {
        $insertNamesUsing = array_merge(['[rowNum]'], $insertNames);
    }
    $mergeSql = 'MERGE ' . $this->db->quoteTableName($table) . ' WITH (HOLDLOCK) '
        . 'USING (' . (!empty($placeholders) ? 'VALUES (' . implode(', ', $placeholders) . ')' : ltrim($values, ' ')) . ') AS [EXCLUDED] (' . implode(', ', $insertNamesUsing) . ') '
        . "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);
        }
    }
    $updateColumns = $this->normalizeTableRowData($table, $updateColumns, $params);
    list($updates, $params) = $this->prepareUpdateSets($table, $updateColumns, $params);
    $updateSql = 'UPDATE SET ' . implode(', ', $updates);
    return "$mergeSql WHEN MATCHED THEN $updateSql WHEN NOT MATCHED THEN $insertSql;";
}