0 关注者

类 yii\db\Query

继承关系yii\db\Query » yii\base\Component » yii\base\BaseObject
实现接口yii\base\Configurable, yii\db\ExpressionInterface, yii\db\QueryInterface
使用 Traitsyii\db\QueryTrait
子类yii\db\ActiveQuery
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/Query.php

Query 表示一个 SELECT SQL 语句,其方式独立于 DBMS。

Query 提供了一组方法来方便地指定 SELECT 语句中不同子句。这些方法可以链接在一起。

通过调用 createCommand(),我们可以得到一个 yii\db\Command 实例,该实例可以进一步用于对数据库执行/执行 DB 查询。

例如,

$query = new Query;
// compose the query
$query->select('id, name')
    ->from('user')
    ->limit(10);
// build and execute the query
$rows = $query->all();
// alternatively, you can create DB command and execute it
$command = $query->createCommand();
// $command->sql returns the actual SQL
$rows = $command->queryAll();

Query 在内部使用 yii\db\QueryBuilder 类来生成 SQL 语句。

有关如何使用 Query 的更详细的使用指南,请参阅 查询构建器指南文章

公有属性

隐藏继承的属性

属性 类型 描述 定义于
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$distinct boolean 是否仅选择不同的数据行。 yii\db\Query
$emulateExecution boolean 是否模拟实际查询执行,返回空或假结果。 yii\db\QueryTrait
$from 数组| 要从中选择的表。 yii\db\Query
$groupBy 数组| 如何对查询结果进行分组。 yii\db\Query
$having 字符串|数组|yii\db\ExpressionInterface| 要在 GROUP BY 子句中应用的条件。 yii\db\Query
$indexBy 字符串|可调用| 查询结果应按其索引的列的名称。 yii\db\QueryTrait
$join 数组| 如何与其他表连接。 yii\db\Query
$limit 整数|yii\db\ExpressionInterface| 要返回的记录的最大数量。 yii\db\QueryTrait
$offset 整数|yii\db\ExpressionInterface| 从哪里返回记录的基于零的偏移量。 yii\db\QueryTrait
$orderBy 数组| 如何对查询结果进行排序。 yii\db\QueryTrait
$params 数组| 按参数占位符索引的查询参数值列表。 yii\db\Query
$queryCacheDependency yii\caching\Dependency| 与此查询的缓存查询结果相关联的依赖项 yii\db\Query
$queryCacheDuration 整数|布尔值| 查询结果可以在缓存中保持有效的默认秒数。 yii\db\Query
$select 数组| 正在选择的列。 yii\db\Query
$selectOption 字符串| 应附加到“SELECT”关键字的其他选项。 yii\db\Query
$tablesUsedInFrom 字符串[] 按别名索引的表名。 yii\db\Query
$union 数组| 这用于在 SQL 语句中构造 UNION 子句。 yii\db\Query
$where 字符串|数组|yii\db\ExpressionInterface| 查询条件。 yii\db\QueryTrait
$withQueries 数组| 这用于在 SQL 查询中构造 WITH 部分。 yii\db\Query

公有方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在通过克隆现有对象创建对象后调用。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即定义且不为空。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__toString() 返回 Query 的 SQL 表示形式 yii\db\Query
__unset() 将组件属性设置为 null。 yii\base\Component
addGroupBy() 将其他分组列添加到现有列。 yii\db\Query
addOrderBy() 向查询添加其他 ORDER BY 列。 yii\db\QueryTrait
addParams() 添加要绑定到查询的其他参数。 yii\db\Query
addSelect() 向查询的 SELECT 部分添加更多列。 yii\db\Query
all() 执行查询并将所有结果作为数组返回。 yii\db\Query
andFilterCompare() 为特定列添加过滤条件,并允许用户选择过滤运算符。 yii\db\Query
andFilterHaving() 向现有 HAVING 条件添加其他条件,但忽略 空操作数 yii\db\Query
andFilterWhere() 向现有 WHERE 条件添加其他条件,但忽略 空操作数 yii\db\QueryTrait
andHaving() 向现有 HAVING 条件添加其他条件。 yii\db\Query
andWhere() 向现有 WHERE 条件添加其他条件。 yii\db\Query
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
average() 返回指定列值的平均值。 yii\db\Query
batch() 启动批量查询。 yii\db\Query
behaviors() 返回此组件应表现为的行为列表。 yii\base\Component
cache() 为该 Query 启用查询缓存。 yii\db\Query
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
className() 返回此类的完全限定名称。 yii\base\BaseObject
column() 执行查询并返回结果的第一列。 yii\db\Query
count() 返回记录数。 yii\db\Query
create() 创建一个新的 Query 对象,并从现有对象复制其属性值。 yii\db\Query
createCommand() 创建一个可用于执行此查询的 DB 命令。 yii\db\Query
detachBehavior() 从组件分离行为。 yii\base\Component
detachBehaviors() 从组件分离所有行为。 yii\base\Component
distinct() 设置指示是否选择 DISTINCT 的值。 yii\db\Query
each() 启动批量查询并逐行检索数据。 yii\db\Query
emulateExecution() 设置是否模拟查询执行,防止与数据存储交互。 yii\db\QueryTrait
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
exists() 返回一个值,指示查询结果是否包含任何数据行。 yii\db\Query
filterHaving() 设置查询的 HAVING 部分,但忽略 空操作数 yii\db\Query
filterWhere() 设置查询的 WHERE 部分,但忽略 空操作数 yii\db\QueryTrait
from() 设置查询的 FROM 部分。 yii\db\Query
getBehavior() 返回命名的行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
getTablesUsedInFrom() 返回在 from() 中使用的表名,按别名索引。 yii\db\Query
groupBy() 设置查询语句的 GROUP BY 部分。 yii\db\Query
hasEventHandlers() 返回一个值,指示是否有任何处理程序附加到指定的事件。 yii\base\Component
hasMethod() 返回一个值,指示是否定义了某个方法。 yii\base\Component
hasProperty() 返回一个值,指示是否为该组件定义了某个属性。 yii\base\Component
having() 设置查询语句的 HAVING 部分。 yii\db\Query
indexBy() 设置 indexBy() 属性。 yii\db\QueryTrait
init() 初始化对象。 yii\base\BaseObject
innerJoin() 将 INNER JOIN 部分添加到查询语句中。 yii\db\Query
join() 将 JOIN 部分添加到查询语句中。 yii\db\Query
leftJoin() 将 LEFT OUTER JOIN 部分添加到查询语句中。 yii\db\Query
limit() 设置查询语句的 LIMIT 部分。 yii\db\QueryTrait
max() 返回指定列值的最大值。 yii\db\Query
min() 返回指定列值的最小值。 yii\db\Query
noCache() 禁用此 Query 的查询缓存。 yii\db\Query
off() 从该组件中分离现有的事件处理程序。 yii\base\Component
offset() 设置查询语句的 OFFSET 部分。 yii\db\QueryTrait
on() 将事件处理程序附加到事件。 yii\base\Component
one() 执行查询并返回结果集的一行。 yii\db\Query
orFilterHaving() 向现有 HAVING 条件添加其他条件,但忽略 空操作数 yii\db\Query
orFilterWhere() 向现有 WHERE 条件添加其他条件,但忽略 空操作数 yii\db\QueryTrait
orHaving() 向现有 HAVING 条件添加其他条件。 yii\db\Query
orWhere() 向现有 WHERE 条件添加其他条件。 yii\db\Query
orderBy() 设置查询语句的 ORDER BY 部分。 yii\db\QueryTrait
params() 设置要绑定到查询语句的参数。 yii\db\Query
populate() 将原始查询结果转换为根据此查询指定的格式。 yii\db\Query
prepare() 准备构建 SQL。 yii\db\Query
rightJoin() 将 RIGHT OUTER JOIN 部分添加到查询语句中。 yii\db\Query
scalar() 将查询结果作为标量值返回。 yii\db\Query
select() 设置查询语句的 SELECT 部分。 yii\db\Query
sum() 返回指定列值的总和。 yii\db\Query
trigger() 触发事件。 yii\base\Component
union() 使用 UNION 运算符追加 SQL 语句。 yii\db\Query
where() 设置查询语句的 WHERE 部分。 yii\db\Query
withQuery() 使用 WITH 语法前置 SQL 语句。 yii\db\Query

受保护方法

隐藏继承的方法

方法 描述 定义于
cleanUpTableNames() 清理表名和别名 两个别名和名称都包含在 {{ 和 }} 中。 yii\db\Query
filterCondition() 从给定的查询条件中删除 空操作数 yii\db\QueryTrait
getUnaliasedColumnsFromSelect() yii\db\Query
getUniqueColumns() 返回唯一的列名,排除重复项。 yii\db\Query
isEmpty() 返回一个值,指示给定值是否“为空”。 yii\db\QueryTrait
normalizeOrderBy() 规范化 ORDER BY 数据的格式。 yii\db\QueryTrait
normalizeSelect() 规范化传递给 select()addSelect() 的 SELECT 列。 yii\db\Query
queryScalar() 通过首先设置 select() 来查询标量值。 yii\db\Query
setCommandCache() 设置 $command 缓存,如果此查询已启用缓存。 yii\db\Query

属性详情

隐藏继承的属性

$distinct 公共属性

是否仅选择不同的数据行。如果将其设置为 true,则 SELECT 子句将更改为 SELECT DISTINCT。

public boolean $distinct false
$from 公共属性

要从中选择的表。例如,['user', 'post']。这用于在 SQL 语句中构建 FROM 子句。

另请参阅 from()

public array|null $from null
$groupBy 公共属性

如何对查询结果进行分组。例如,['company', 'department']。这用于在 SQL 语句中构建 GROUP BY 子句。

public array|null $groupBy null
$having 公共属性

要在 GROUP BY 子句中应用的条件。它可以是字符串或数组。请参阅 where() 以了解如何指定条件。

$join 公共属性

如何与其他表连接。每个数组元素代表一个连接的规范,其结构如下

[$joinType, $tableName, $joinCondition]

例如,

[
    ['INNER JOIN', 'user', 'user.id = author_id'],
    ['LEFT JOIN', 'team', 'team.id = team_id'],
]
public array|null $join null
$params 公共属性

查询参数值的列表,以参数占位符为索引。例如,[':name' => 'Dan', ':age' => 31]

public array|null $params = []
$queryCacheDependency 公共属性 (自版本 2.0.14 起可用)

与此查询的缓存查询结果相关联的依赖项

另请参阅 cache()

$queryCacheDuration 公共属性 (自版本 2.0.14 起可用)

查询结果在缓存中保持有效时间的默认秒数。使用 0 表示缓存数据永不过期。使用负数表示不应使用查询缓存。使用布尔值 true 表示应使用 yii\db\Connection::$queryCacheDuration

另请参阅 cache()

$select 公共属性

正在选择的列。例如,['id', 'name']。这用于在 SQL 语句中构建 SELECT 子句。如果未设置,则表示选择所有列。

另请参阅 select()

public array|null $select null
$selectOption 公共属性

应附加到“SELECT”关键字的其他选项。例如,在 MySQL 中,可以使用“SQL_CALC_FOUND_ROWS”选项。

public string|null $selectOption null
$tablesUsedInFrom 公共属性

按别名索引的表名。

public string[] $tablesUsedInFrom null
$union 公共属性

它用于构建 SQL 语句中的 UNION 子句。每个数组元素都是以下结构的数组

  • query: 字符串或 yii\db\Query 对象,表示查询
  • all: 布尔值,是否应为 UNION ALLUNION
public array|null $union null
$withQueries 公共属性 (自版本 2.0.35 起可用)

它用于构建 SQL 查询中的 WITH 部分。每个数组元素都是以下结构的数组

  • query: 字符串或 yii\db\Query 对象,表示查询
  • alias: 字符串,查询的别名,以便后续使用
  • recursive: 布尔值,是否应为 WITH RECURSIVEWITH

另请参阅 withQuery()

public array|null $withQueries null

方法详情

隐藏继承的方法

__call() 公共方法

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

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

此方法将检查任何附加的行为是否具有指定的方法,如果可用,则执行它。

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

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

方法名称

$params array

方法参数

返回值 mixed

方法返回值

抛出异常 yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共方法

定义于: yii\base\Component::__clone()

此方法在通过克隆现有对象创建对象后调用。

它会移除所有行为,因为它们附加到旧对象上。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公共方法

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

构造函数。

默认实现执行两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被覆盖,建议

  • 构造函数的最后一个参数是一个配置数组,如这里的 $config
  • 在构造函数的末尾调用父级实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的键值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共方法

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

返回组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 getter 定义的属性:返回 getter 的结果
  • 行为的属性:返回行为属性值

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

另请参阅 __set()

public mixed __get ( $name )
$name 字符串

属性名称

返回值 mixed

属性值或行为属性的值

抛出异常 yii\base\UnknownPropertyException

如果未定义属性

抛出异常 yii\base\InvalidCallException

如果属性是只写属性。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (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\Component::__isset()

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

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性返回 false

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

另请参阅 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name 字符串

属性名称或事件名称

返回值 boolean

指定的属性是否已设置

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\Component::__set()

设置组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:设置属性值
  • “on xyz”格式的事件:将处理程序附加到“xyz”事件
  • “as xyz”格式的行为:附加名为“xyz”的行为
  • 行为的属性:设置行为属性值

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

另请参阅 __get()

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

属性名称或事件名称

$value mixed

属性值

抛出异常 yii\base\UnknownPropertyException

如果未定义属性

抛出异常 yii\base\InvalidCallException

如果属性是只读属性。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__toString() 公共方法

返回 Query 的 SQL 表示形式

public string __toString ( )

                public function __toString()
{
    return serialize($this);
}

            
__unset() 公共方法

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

将组件属性设置为 null。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

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

另请参阅 https://php.ac.cn/manual/en/function.unset.php

public void __unset ( $name )
$name 字符串

属性名称

抛出异常 yii\base\InvalidCallException

如果属性为只读。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
addGroupBy() 公共方法

将其他分组列添加到现有列。

另请参阅 groupBy()

public $this addGroupBy ( $columns )
$columns string|array|yii\db\ExpressionInterface

要分组的其他列。列可以以字符串(例如“id, name”)或数组(例如['id', 'name'])的形式指定。除非列包含一些括号(这意味着列包含 DB 表达式),否则该方法将自动引用列名。

请注意,如果您的 group-by 是包含逗号的表达式,则应始终使用数组来表示 group-by 信息。否则,该方法将无法正确确定 group-by 列。

从 2.0.7 版本开始,可以传递一个 yii\db\Expression 对象以明确地用纯 SQL 指定 GROUP BY 部分。从 2.0.14 版本开始,也可以传递一个 yii\db\ExpressionInterface 对象。

返回值 $this

查询对象本身

                public function addGroupBy($columns)
{
    if ($columns instanceof ExpressionInterface) {
        $columns = [$columns];
    } elseif (!is_array($columns)) {
        $columns = preg_split('/\s*,\s*/', trim($columns), -1, PREG_SPLIT_NO_EMPTY);
    }
    if ($this->groupBy === null) {
        $this->groupBy = $columns;
    } else {
        $this->groupBy = array_merge($this->groupBy, $columns);
    }
    return $this;
}

            
addOrderBy() 公共方法

定义于: yii\db\QueryTrait::addOrderBy()

向查询添加其他 ORDER BY 列。

另请参阅 orderBy()

public $this addOrderBy ( $columns )
$columns string|array|yii\db\ExpressionInterface

要按其排序的列(以及方向)。列可以以字符串(例如“id ASC, name DESC”)或数组(例如['id' => SORT_ASC, 'name' => SORT_DESC])的形式指定。

除非列包含一些括号(这意味着列包含 DB 表达式),否则该方法将自动引用列名。

请注意,如果您的 order-by 是包含逗号的表达式,则应始终使用数组来表示 order-by 信息。否则,该方法将无法正确确定 order-by 列。

从 2.0.7 版本开始,可以传递一个 yii\db\ExpressionInterface 对象以明确地用纯 SQL 指定 ORDER BY 部分。

返回值 $this

查询对象本身

                public function addOrderBy($columns)
{
    $columns = $this->normalizeOrderBy($columns);
    if ($this->orderBy === null) {
        $this->orderBy = $columns;
    } else {
        $this->orderBy = array_merge($this->orderBy, $columns);
    }
    return $this;
}

            
addParams() 公共方法

添加要绑定到查询的其他参数。

另请参阅 params()

public $this addParams ( $params )
$params array

查询参数值的列表,以参数占位符为索引。例如,[':name' => 'Dan', ':age' => 31]

返回值 $this

查询对象本身

                public function addParams($params)
{
    if (!empty($params)) {
        if (empty($this->params)) {
            $this->params = $params;
        } else {
            foreach ($params as $name => $value) {
                if (is_int($name)) {
                    $this->params[] = $value;
                } else {
                    $this->params[$name] = $value;
                }
            }
        }
    }
    return $this;
}

            
addSelect() 公共方法

向查询的 SELECT 部分添加更多列。

请注意,如果之前未指定 select(),则如果也希望选择所有剩余列,则应明确包含*

$query->addSelect(["*", "CONCAT(first_name, ' ', last_name) AS full_name"])->one();

另请参阅 select()

public $this addSelect ( $columns )
$columns string|array|yii\db\ExpressionInterface

要添加到选择的列。有关此参数格式的更多详细信息,请参阅 select()

返回值 $this

查询对象本身

                public function addSelect($columns)
{
    if ($this->select === null) {
        return $this->select($columns);
    }
    if (!is_array($this->select)) {
        $this->select = $this->normalizeSelect($this->select);
    }
    $this->select = array_merge($this->select, $this->normalizeSelect($columns));
    return $this;
}

            
all() 公共方法

执行查询并将所有结果作为数组返回。

public array all ( $db null )
$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 array

查询结果。如果查询结果为空,则将返回空数组。

                public function all($db = null)
{
    if ($this->emulateExecution) {
        return [];
    }
    $rows = $this->createCommand($db)->queryAll();
    return $this->populate($rows);
}

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

为特定列添加过滤条件,并允许用户选择过滤运算符。

它为给定的字段添加了一个额外的 WHERE 条件,并根据给定值的开头几个字符确定比较运算符。该条件以与 andFilterWhere() 中相同的方式添加,因此 空值 将被忽略。新的条件和现有的条件将使用AND运算符连接。

比较运算符根据给定值中的开头几个字符智能地确定。特别是,如果它们作为给定值的开头字符出现,它会识别以下运算符

  • <:列必须小于给定值。
  • >:列必须大于给定值。
  • <=:列必须小于或等于给定值。
  • >=:列必须大于或等于给定值。
  • <>:列必须不等于给定值。
  • =:列必须等于给定值。
  • 如果没有检测到上述任何运算符,则将使用$defaultOperator
public $this andFilterCompare ( $name, $value, $defaultOperator '=' )
$name 字符串

列名。

$value 字符串

列值,可选地以比较运算符为前缀。

$defaultOperator 字符串

$value中未给出运算符时使用的运算符。默认为=,执行精确匹配。

返回值 $this

查询对象本身

                public function andFilterCompare($name, $value, $defaultOperator = '=')
{
    if (preg_match('/^(<>|>=|>|<=|<|=)/', (string)$value, $matches)) {
        $operator = $matches[1];
        $value = substr($value, strlen($operator));
    } else {
        $operator = $defaultOperator;
    }
    return $this->andFilterWhere([$operator, $name, $value]);
}

            
andFilterHaving() 公共方法(自 2.0.11 版本起可用)

向现有 HAVING 条件添加其他条件,但忽略 空操作数

新的条件和现有的条件将使用AND运算符连接。

此方法类似于 andHaving()。主要区别在于此方法将删除 空的查询操作数。因此,此方法最适合根据用户输入的筛选值构建查询条件。

另请参阅

public $this andFilterHaving ( array $condition )
$condition array

新的 HAVING 条件。有关如何指定此参数,请参阅 having()

返回值 $this

查询对象本身

                public function andFilterHaving(array $condition)
{
    $condition = $this->filterCondition($condition);
    if ($condition !== []) {
        $this->andHaving($condition);
    }
    return $this;
}

            
andFilterWhere() 公共方法

定义于: yii\db\QueryTrait::andFilterWhere()

向现有 WHERE 条件添加其他条件,但忽略 空操作数

新的条件和现有的条件将使用“AND”运算符连接。

此方法类似于 andWhere()。主要区别在于此方法将删除 空的查询操作数。因此,此方法最适合根据用户输入的筛选值构建查询条件。

另请参阅

public $this andFilterWhere ( array $condition )
$condition array

新的 WHERE 条件。有关如何指定此参数,请参阅 where()

返回值 $this

查询对象本身

                public function andFilterWhere(array $condition)
{
    $condition = $this->filterCondition($condition);
    if ($condition !== []) {
        $this->andWhere($condition);
    }
    return $this;
}

            
andHaving() 公共方法

向现有 HAVING 条件添加其他条件。

新的条件和现有的条件将使用AND运算符连接。

另请参阅

public $this andHaving ( $condition, $params = [] )
$condition string|array|yii\db\ExpressionInterface

新的 HAVING 条件。请参考 where() 如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function andHaving($condition, $params = [])
{
    if ($this->having === null) {
        $this->having = $condition;
    } else {
        $this->having = ['and', $this->having, $condition];
    }
    $this->addParams($params);
    return $this;
}

            
andWhere() 公共方法

向现有 WHERE 条件添加其他条件。

新的条件和现有的条件将使用AND运算符连接。

另请参阅

public $this andWhere ( $condition, $params = [] )
$condition string|array|yii\db\ExpressionInterface

新的 WHERE 条件。请参考 where() 如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function andWhere($condition, $params = [])
{
    if ($this->where === null) {
        $this->where = $condition;
    } elseif (is_array($this->where) && isset($this->where[0]) && strcasecmp($this->where[0], 'and') === 0) {
        $this->where[] = $condition;
    } else {
        $this->where = ['and', $this->where, $condition];
    }
    $this->addParams($params);
    return $this;
}

            
attachBehavior() 公共方法

定义于: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。

另请参阅 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name 字符串

行为的名称。

$behavior 字符串|数组|yii\base\Behavior

行为配置。可以是以下之一

返回值 yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公共方法

定义于: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象、一个指定行为类的字符串或一个用于创建行为的配置数组。

另请参阅 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
average() 公共方法

返回指定列值的平均值。

public mixed average ( $q, $db null )
$q 字符串

列名或表达式。确保在表达式中正确地 引用 列名。

$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 mixed

指定列值的平均值。

                public function average($q, $db = null)
{
    if ($this->emulateExecution) {
        return 0;
    }
    return $this->queryScalar("AVG($q)", $db);
}

            
batch() 公共方法

启动批量查询。

批量查询支持分批获取数据,这可以将内存使用量控制在一定范围内。此方法将返回一个 yii\db\BatchQueryResult 对象,该对象实现了 Iterator 接口,并且可以遍历以分批检索数据。

例如,

$query = (new Query)->from('user');
foreach ($query->batch() as $rows) {
    // $rows is an array of 100 or fewer rows from user table
}
public yii\db\BatchQueryResult batch ( $batchSize 100, $db null )
$batchSize 整数

每次批处理中要获取的记录数。

$db yii\db\Connection|null

数据库连接。如果未设置,将使用“db”应用程序组件。

返回值 yii\db\BatchQueryResult

批量查询结果。它实现了 Iterator 接口,并且可以遍历以分批检索数据。

                public function batch($batchSize = 100, $db = null)
{
    return Yii::createObject([
        'class' => BatchQueryResult::className(),
        'query' => $this,
        'batchSize' => $batchSize,
        'db' => $db,
        'each' => false,
    ]);
}

            
behaviors() 公共方法

定义于: yii\base\Component::behaviors()

返回此组件应表现为的行为列表。

子类可以重写此方法来指定它们希望表现出的行为。

此方法的返回值应该是一个行为对象或配置的数组,这些对象或配置由行为名称索引。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

请注意,行为类必须扩展自 yii\base\Behavior。可以使用名称或匿名方式附加行为。当数组键使用名称时,使用此名称,行为稍后可以使用 getBehavior() 检索,或使用 detachBehavior() 分离。匿名行为无法检索或分离。

在此方法中声明的行为将自动附加到组件(按需)。

public 数组 behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

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

为该 Query 启用查询缓存。

public $this cache ( $duration true, $dependency null )
$duration 整数|布尔值 true

查询结果在缓存中保持有效的秒数。使用 0 表示缓存数据永不过期。使用负数表示不应使用查询缓存。使用布尔值 true 表示应使用 yii\db\Connection::$queryCacheDuration。默认为 true

$dependency yii\caching\Dependency|

与缓存结果关联的缓存依赖项。

返回值 $this

查询对象本身

                public function cache($duration = true, $dependency = null)
{
    $this->queryCacheDuration = $duration;
    $this->queryCacheDependency = $dependency;
    return $this;
}

            
canGetProperty() 公共方法

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

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

如果可以读取属性

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

另请参阅 canSetProperty()

public 布尔值 canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公共方法

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

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

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

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

另请参阅 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可以写入

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

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

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

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

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

此类的完全限定名称。

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

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

清理表名和别名 两个别名和名称都包含在 {{ 和 }} 中。

protected string[] cleanUpTableNames ( $tableNames )
$tableNames array

非空数组

返回值 字符串[]

以别名索引的表名

                protected function cleanUpTableNames($tableNames)
{
    $cleanedUpTableNames = [];
    foreach ($tableNames as $alias => $tableName) {
        if (is_string($tableName) && !is_string($alias)) {
            $pattern = <<<PATTERN
'"`\[]|{{)
'"`\]]|}})
?\)
\s+
(?:as)?
\s*
?:['"`\[]|{{)
.*?
(?:['"`\]]|}})
|
.*?

ERN;
            if (preg_match($pattern, $tableName, $matches)) {
                if (isset($matches[2])) {
                    list(, $tableName, $alias) = $matches;
                } else {
                    $tableName = $alias = $matches[1];
                }
            }
        }
        if ($tableName instanceof Expression) {
            if (!is_string($alias)) {
                throw new InvalidArgumentException('To use Expression in from() method, pass it in array format with alias.');
            }
            $cleanedUpTableNames[$this->ensureNameQuoted($alias)] = $tableName;
        } elseif ($tableName instanceof self) {
            $cleanedUpTableNames[$this->ensureNameQuoted($alias)] = $tableName;
        } else {
            $cleanedUpTableNames[$this->ensureNameQuoted($alias)] = $this->ensureNameQuoted($tableName);
        }
    }
    return $cleanedUpTableNames;
}

            
column() 公共方法

执行查询并返回结果的第一列。

public array column ( $db null )
$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 array

查询结果的第一列。如果查询结果为空,则返回空数组。

                public function column($db = null)
{
    if ($this->emulateExecution) {
        return [];
    }
    if ($this->indexBy === null) {
        return $this->createCommand($db)->queryColumn();
    }
    if (is_string($this->indexBy) && is_array($this->select) && count($this->select) === 1) {
        if (strpos($this->indexBy, '.') === false && count($tables = $this->getTablesUsedInFrom()) > 0) {
            $this->select[] = key($tables) . '.' . $this->indexBy;
        } else {
            $this->select[] = $this->indexBy;
        }
    }
    $rows = $this->createCommand($db)->queryAll();
    $results = [];
    $column = null;
    if (is_string($this->indexBy)) {
        if (($dotPos = strpos($this->indexBy, '.')) === false) {
            $column = $this->indexBy;
        } else {
            $column = substr($this->indexBy, $dotPos + 1);
        }
    }
    foreach ($rows as $row) {
        $value = reset($row);
        if ($this->indexBy instanceof \Closure) {
            $results[call_user_func($this->indexBy, $row)] = $value;
        } else {
            $results[$row[$column]] = $value;
        }
    }
    return $results;
}

            
count() 公共方法

返回记录数。

public integer|string|null count ( $q '*', $db null )
$q 字符串

COUNT 表达式。默认为 '*'。请确保在表达式中正确引用列名。

$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数(或为 null),则将使用 db 应用程序组件。

返回值 integer|string|null

记录数。根据底层数据库引擎和对超过 32 位 PHP 整数所能处理的整数的支持,结果可能为字符串。

                public function count($q = '*', $db = null)
{
    if ($this->emulateExecution) {
        return 0;
    }
    return $this->queryScalar("COUNT($q)", $db);
}

            
create() 公共静态方法

创建一个新的 Query 对象,并从现有对象复制其属性值。

正在复制的属性是查询生成器将使用的属性。

public static yii\db\Query create ( $from )
$from yii\db\Query

源查询对象

返回值 yii\db\Query

新的 Query 对象

                public static function create($from)
{
    return new self([
        'where' => $from->where,
        'limit' => $from->limit,
        'offset' => $from->offset,
        'orderBy' => $from->orderBy,
        'indexBy' => $from->indexBy,
        'select' => $from->select,
        'selectOption' => $from->selectOption,
        'distinct' => $from->distinct,
        'from' => $from->from,
        'groupBy' => $from->groupBy,
        'join' => $from->join,
        'having' => $from->having,
        'union' => $from->union,
        'params' => $from->params,
        'withQueries' => $from->withQueries,
    ]);
}

            
createCommand() 公共方法

创建一个可用于执行此查询的 DB 命令。

public yii\db\Command createCommand ( $db null )
$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 yii\db\Command

创建的 DB 命令实例。

                public function createCommand($db = null)
{
    if ($db === null) {
        $db = Yii::$app->getDb();
    }
    list($sql, $params) = $db->getQueryBuilder()->build($this);
    $command = $db->createCommand($sql, $params);
    $this->setCommandCache($command);
    return $command;
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name 字符串

行为的名称。

返回值 yii\base\Behavior|null

分离的行为。如果行为不存在,则为 Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件分离所有行为。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
distinct() 公共方法

设置指示是否选择 DISTINCT 的值。

public $this distinct ( $value true )
$value boolean

是否选择 DISTINCT。

返回值 $this

查询对象本身

                public function distinct($value = true)
{
    $this->distinct = $value;
    return $this;
}

            
each() 公共方法

启动批量查询并逐行检索数据。

此方法类似于 batch(),但区别在于结果的每次迭代中,只返回一行数据。例如,

$query = (new Query)->from('user');
foreach ($query->each() as $row) {
}
public yii\db\BatchQueryResult each ( $batchSize 100, $db null )
$batchSize 整数

每次批处理中要获取的记录数。

$db yii\db\Connection|null

数据库连接。如果未设置,将使用“db”应用程序组件。

返回值 yii\db\BatchQueryResult

批量查询结果。它实现了 Iterator 接口,并且可以遍历以分批检索数据。

                public function each($batchSize = 100, $db = null)
{
    return Yii::createObject([
        'class' => BatchQueryResult::className(),
        'query' => $this,
        'batchSize' => $batchSize,
        'db' => $db,
        'each' => true,
    ]);
}

            
emulateExecution() 公共方法 (自 2.0.11 版本起可用)

定义于: yii\db\QueryTrait::emulateExecution()

设置是否模拟查询执行,防止与数据存储交互。

启用此模式后,返回查询结果的方法(如 yii\db\QueryInterface::one()yii\db\QueryInterface::all()yii\db\QueryInterface::exists() 等)将返回空值或 false 值。如果您的程序逻辑指示查询不应返回任何结果,例如在您设置 false where 条件(如 0=1)的情况下,您应该使用此方法。

public $this emulateExecution ( $value true )
$value boolean

是否阻止查询执行。

返回值 $this

查询对象本身。

                public function emulateExecution($value = true)
{
    $this->emulateExecution = $value;
    return $this;
}

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保在 behaviors() 中声明的行为已附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
exists() 公共方法

返回一个值,指示查询结果是否包含任何数据行。

public boolean exists ( $db null )
$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 boolean

查询结果是否包含任何数据行。

                public function exists($db = null)
{
    if ($this->emulateExecution) {
        return false;
    }
    $command = $this->createCommand($db);
    $params = $command->params;
    $command->setSql($command->db->getQueryBuilder()->selectExists($command->getSql()));
    $command->bindValues($params);
    return (bool) $command->queryScalar();
}

            
filterCondition() 受保护方法

定义于: yii\db\QueryTrait::filterCondition()

从给定的查询条件中删除 空操作数

protected array filterCondition ( $condition )
$condition array

原始条件

返回值 array

已移除空操作数的条件。

抛出异常 yii\base\NotSupportedException

如果条件运算符不受支持

                protected function filterCondition($condition)
{
    if (!is_array($condition)) {
        return $condition;
    }
    if (!isset($condition[0])) {
        // hash format: 'column1' => 'value1', 'column2' => 'value2', ...
        foreach ($condition as $name => $value) {
            if ($this->isEmpty($value)) {
                unset($condition[$name]);
            }
        }
        return $condition;
    }
    // operator format: operator, operand 1, operand 2, ...
    $operator = array_shift($condition);
    switch (strtoupper($operator)) {
        case 'NOT':
        case 'AND':
        case 'OR':
            foreach ($condition as $i => $operand) {
                $subCondition = $this->filterCondition($operand);
                if ($this->isEmpty($subCondition)) {
                    unset($condition[$i]);
                } else {
                    $condition[$i] = $subCondition;
                }
            }
            if (empty($condition)) {
                return [];
            }
            break;
        case 'BETWEEN':
        case 'NOT BETWEEN':
            if (array_key_exists(1, $condition) && array_key_exists(2, $condition)) {
                if ($this->isEmpty($condition[1]) || $this->isEmpty($condition[2])) {
                    return [];
                }
            }
            break;
        default:
            if (array_key_exists(1, $condition) && $this->isEmpty($condition[1])) {
                return [];
            }
    }
    array_unshift($condition, $operator);
    return $condition;
}

            
filterHaving() 公共方法 (自版本 2.0.11 起可用)

设置查询的 HAVING 部分,但忽略 空操作数

此方法类似于 having()。主要区别在于此方法将移除空的查询操作数。因此,此方法最适合根据用户输入的筛选值构建查询条件。

以下代码显示了此方法与 having() 的区别

// HAVING `age`=:age
$query->filterHaving(['name' => null, 'age' => 20]);
// HAVING `age`=:age
$query->having(['age' => 20]);
// HAVING `name` IS NULL AND `age`=:age
$query->having(['name' => null, 'age' => 20]);

请注意,与 having() 不同,您不能将绑定参数传递给此方法。

另请参阅

public $this filterHaving ( array $condition )
$condition array

应放在 HAVING 部分的条件。有关如何指定此参数,请参阅 having()

返回值 $this

查询对象本身

                public function filterHaving(array $condition)
{
    $condition = $this->filterCondition($condition);
    if ($condition !== []) {
        $this->having($condition);
    }
    return $this;
}

            
filterWhere() 公共方法

定义于: yii\db\QueryTrait::filterWhere()

设置查询的 WHERE 部分,但忽略 空操作数

此方法类似于 where()。主要区别在于此方法将移除空的查询操作数。因此,此方法最适合根据用户输入的筛选值构建查询条件。

以下代码显示了此方法与 where() 的区别

// WHERE `age`=:age
$query->filterWhere(['name' => null, 'age' => 20]);
// WHERE `age`=:age
$query->where(['age' => 20]);
// WHERE `name` IS NULL AND `age`=:age
$query->where(['name' => null, 'age' => 20]);

请注意,与 where() 不同,您不能将绑定参数传递给此方法。

另请参阅

public $this filterWhere ( array $condition )
$condition array

应放在 WHERE 部分的条件。有关如何指定此参数,请参阅 where()

返回值 $this

查询对象本身

                public function filterWhere(array $condition)
{
    $condition = $this->filterCondition($condition);
    if ($condition !== []) {
        $this->where($condition);
    }
    return $this;
}

            
from() 公共方法

设置查询的 FROM 部分。

public $this from ( $tables )
$tables string|array|yii\db\ExpressionInterface

要从中选择的表。这可以是字符串(例如 'user')或数组(例如 ['user', 'profile']),指定一个或多个表名。表名可以包含模式前缀(例如 'public.user')和/或表别名(例如 'user u')。除非表名包含一些括号(这意味着表作为子查询或数据库表达式给出),否则该方法将自动引用表名。

当表作为数组指定时,您也可以使用数组键作为表别名(如果表不需要别名,请不要使用字符串键)。

使用 Query 对象表示子查询。在这种情况下,相应的数组键将用作子查询的别名。

要以纯 SQL 指定 FROM 部分,您可以传递 yii\db\ExpressionInterface 的实例。

以下是一些示例

// SELECT * FROM  `user` `u`, `profile`;
$query = (new \yii\db\Query)->from(['u' => 'user', 'profile']);

// SELECT * FROM (SELECT * FROM `user` WHERE `active` = 1) `activeusers`;
$subquery = (new \yii\db\Query)->from('user')->where(['active' => true])
$query = (new \yii\db\Query)->from(['activeusers' => $subquery]);

// subquery can also be a string with plain SQL wrapped in parenthesis
// SELECT * FROM (SELECT * FROM `user` WHERE `active` = 1) `activeusers`;
$subquery = "(SELECT * FROM `user` WHERE `active` = 1)";
$query = (new \yii\db\Query)->from(['activeusers' => $subquery]);
返回值 $this

查询对象本身

                public function from($tables)
{
    if ($tables instanceof ExpressionInterface) {
        $tables = [$tables];
    }
    if (is_string($tables)) {
        $tables = preg_split('/\s*,\s*/', trim($tables), -1, PREG_SPLIT_NO_EMPTY);
    }
    $this->from = $tables;
    return $this;
}

            
getBehavior() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名的行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name 字符串

行为名称

返回值 yii\base\Behavior|null

行为对象,如果行为不存在则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getTablesUsedInFrom() 公共方法 (自版本 2.0.12 起可用)

返回在 from() 中使用的表名,按别名索引。

别名和名称都用 {{ 和 }} 括起来。

public string[] getTablesUsedInFrom ( )
返回值 字符串[]

以别名索引的表名

抛出异常 yii\base\InvalidConfigException

                public function getTablesUsedInFrom()
{
    if (empty($this->from)) {
        return [];
    }
    if (is_array($this->from)) {
        $tableNames = $this->from;
    } elseif (is_string($this->from)) {
        $tableNames = preg_split('/\s*,\s*/', trim($this->from), -1, PREG_SPLIT_NO_EMPTY);
    } elseif ($this->from instanceof Expression) {
        $tableNames = [$this->from];
    } else {
        throw new InvalidConfigException(gettype($this->from) . ' in $from is not supported.');
    }
    return $this->cleanUpTableNames($tableNames);
}

            
getUnaliasedColumnsFromSelect() 受保护方法 (自版本 2.0.14 起可用)
已弃用 2.0.21

protected array getUnaliasedColumnsFromSelect ( )
返回值 array

SELECT 语句中没有别名的列列表。

                protected function getUnaliasedColumnsFromSelect()
{
    $result = [];
    if (is_array($this->select)) {
        foreach ($this->select as $name => $value) {
            if (is_int($name)) {
                $result[] = $value;
            }
        }
    }
    return array_unique($result);
}

            
getUniqueColumns() 受保护方法 (自版本 2.0.14 起可用)
已弃用 2.0.21

返回唯一的列名,排除重复项。

要移除的列

  • 如果列定义已存在于 SELECT 部分中且具有相同的别名
  • 如果未带别名的列定义也已存在于未带别名的 SELECT 部分中
protected void getUniqueColumns ( $columns )
$columns array

要合并到 select 的列。

                protected function getUniqueColumns($columns)
{
    $unaliasedColumns = $this->getUnaliasedColumnsFromSelect();
    $result = [];
    foreach ($columns as $columnAlias => $columnDefinition) {
        if (!$columnDefinition instanceof Query) {
            if (is_string($columnAlias)) {
                $existsInSelect = isset($this->select[$columnAlias]) && $this->select[$columnAlias] === $columnDefinition;
                if ($existsInSelect) {
                    continue;
                }
            } elseif (is_int($columnAlias)) {
                $existsInSelect = in_array($columnDefinition, $unaliasedColumns, true);
                $existsInResultSet = in_array($columnDefinition, $result, true);
                if ($existsInSelect || $existsInResultSet) {
                    continue;
                }
            }
        }
        $result[$columnAlias] = $columnDefinition;
    }
    return $result;
}

            
groupBy() 公共方法

设置查询语句的 GROUP BY 部分。

另请参阅 addGroupBy()

public $this groupBy ( $columns )
$columns 字符串|数组|yii\db\ExpressionInterface|

要分组的列。列可以用字符串(例如“id, name”)或数组(例如 ['id', 'name'])指定。除非列包含一些括号(这意味着列包含数据库表达式),否则该方法将自动引用列名。

请注意,如果您的 group-by 是包含逗号的表达式,则应始终使用数组来表示 group-by 信息。否则,该方法将无法正确确定 group-by 列。

从 2.0.7 版本开始,可以传递一个 yii\db\ExpressionInterface 对象来显式地指定 GROUP BY 部分的纯 SQL 语句。从 2.0.14 版本开始,也可以传递一个 yii\db\ExpressionInterface 对象。

返回值 $this

查询对象本身

                public function groupBy($columns)
{
    if ($columns instanceof ExpressionInterface) {
        $columns = [$columns];
    } elseif (!is_array($columns) && !is_null($columns)) {
        $columns = preg_split('/\s*,\s*/', trim($columns), -1, PREG_SPLIT_NO_EMPTY);
    }
    $this->groupBy = $columns;
    return $this;
}

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否有任何处理程序附加到指定的事件。

public boolean hasEventHandlers ( $name )
$name 字符串

事件名称

返回值 boolean

是否存在任何附加到该事件的处理程序。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公共方法

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

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

如果满足以下条件,则定义了方法

  • 类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name 字符串

属性名称

$checkBehaviors boolean

是否将行为的方法视为此组件的方法

返回值 boolean

方法是否已定义

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公共方法

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

返回一个值,指示是否为该组件定义了某个属性。

如果满足以下条件,则定义了属性

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

另请参阅

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否已定义

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

            
having() 公共方法

设置查询语句的 HAVING 部分。

另请参阅

public $this having ( $condition, $params = [] )
$condition string|array|yii\db\ExpressionInterface

要放在 HAVING 之后的条件。请参阅 where() 以了解如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function having($condition, $params = [])
{
    $this->having = $condition;
    $this->addParams($params);
    return $this;
}

            
indexBy() 公共方法

定义于: yii\db\QueryTrait::indexBy()

设置 indexBy() 属性。

public $this indexBy ( $column )
$column string|callable

查询结果应按其索引的列的名称。这也可以是一个可调用对象(例如匿名函数),它根据给定的行数据返回索引值。可调用对象的签名应为

function ($row)
{
    // return the index value corresponding to $row
}
返回值 $this

查询对象本身

                public function indexBy($column)
{
    $this->indexBy = $column;
    return $this;
}

            
init() 公共方法

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

初始化对象。

此方法在构造函数结束时调用,在对象使用给定配置初始化之后调用。

public void init ( )

                public function init()
{
}

            
innerJoin() 公共方法

将 INNER JOIN 部分添加到查询语句中。

public $this innerJoin ( $table, $on '', $params = [] )
$table string|array

要连接的表或子查询。

使用字符串表示要连接的表的名称。表名可以包含模式前缀(例如 'public.user')和/或表别名(例如 'user u')。该方法会自动引用表名,除非它包含一些括号(这意味着表作为子查询或数据库表达式给出)。

您还可以将表指定为包含一个元素的数组,使用数组键作为表别名(例如 ['u' => 'user'])。

要连接子查询,请使用包含一个元素的数组,并将值设置为表示子查询的 yii\db\Query 对象,以及表示别名的相应键。

$on string|array

应出现在 ON 部分的连接条件。请参阅 join() 以了解如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function innerJoin($table, $on = '', $params = [])
{
    $this->join[] = ['INNER JOIN', $table, $on];
    return $this->addParams($params);
}

            
isEmpty() 受保护方法

定义于: yii\db\QueryTrait::isEmpty()

返回一个值,指示给定值是否“为空”。

如果满足以下条件之一,则该值被认为是“空”

  • 它是 null
  • 空字符串 (''),
  • 仅包含空格字符的字符串,
  • 或空数组。
protected boolean isEmpty ( $value )
$value mixed
返回值 boolean

如果值为空

                protected function isEmpty($value)
{
    return $value === '' || $value === [] || $value === null || is_string($value) && trim($value) === '';
}

            
join() 公共方法

将 JOIN 部分添加到查询语句中。

第一个参数指定它是哪种类型的连接。

public $this join ( $type, $table, $on '', $params = [] )
$type 字符串

连接的类型,例如 INNER JOIN、LEFT JOIN。

$table string|array

要连接的表或子查询。

使用字符串表示要连接的表的名称。表名可以包含模式前缀(例如 'public.user')和/或表别名(例如 'user u')。该方法会自动引用表名,除非它包含一些括号(这意味着表作为子查询或数据库表达式给出)。

您还可以将表指定为包含一个元素的数组,使用数组键作为表别名(例如 ['u' => 'user'])。

要连接子查询,请使用包含一个元素的数组,并将值设置为表示子查询的 yii\db\Query 对象,以及表示别名的相应键。

$on string|array

应出现在 ON 部分的连接条件。请参阅 where() 以了解如何指定此参数。

请注意,where() 的数组格式旨在将列匹配到值而不是列匹配到列,因此以下内容将不会按预期工作:['post.author_id' => 'user.id'],它会将 post.author_id 列值与字符串 'user.id' 进行匹配。建议在此处使用字符串语法,它更适合于连接

'post.author_id = user.id'
$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function join($type, $table, $on = '', $params = [])
{
    $this->join[] = [$type, $table, $on];
    return $this->addParams($params);
}

            
leftJoin() 公共方法

将 LEFT OUTER JOIN 部分添加到查询语句中。

public $this leftJoin ( $table, $on '', $params [] )
$table string|array

要连接的表或子查询。

使用字符串表示要连接的表的名称。表名可以包含模式前缀(例如 'public.user')和/或表别名(例如 'user u')。该方法会自动引用表名,除非它包含一些括号(这意味着表作为子查询或数据库表达式给出)。

您还可以将表指定为包含一个元素的数组,使用数组键作为表别名(例如 ['u' => 'user'])。

要连接子查询,请使用包含一个元素的数组,并将值设置为表示子查询的 yii\db\Query 对象,以及表示别名的相应键。

$on string|array

应出现在 ON 部分的连接条件。请参阅 join() 以了解如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)

返回值 $this

查询对象本身

                public function leftJoin($table, $on = '', $params = [])
{
    $this->join[] = ['LEFT JOIN', $table, $on];
    return $this->addParams($params);
}

            
limit() 公共方法

定义于: yii\db\QueryTrait::limit()

设置查询语句的 LIMIT 部分。

public $this limit ( $limit )
$limit 整数|yii\db\ExpressionInterface|

限制。使用 null 或负值禁用限制。

返回值 $this

查询对象本身

                public function limit($limit)
{
    $this->limit = $limit;
    return $this;
}

            
max() 公共方法

返回指定列值的最大值。

public mixed max ( $q, $db null )
$q 字符串

列名或表达式。确保在表达式中正确地 引用 列名。

$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 mixed

指定列值的最大值。

                public function max($q, $db = null)
{
    return $this->queryScalar("MAX($q)", $db);
}

            
min() 公共方法

返回指定列值的最小值。

public mixed min ( $q, $db null )
$q 字符串

列名或表达式。确保在表达式中正确地 引用 列名。

$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 mixed

指定列值的最小值。

                public function min($q, $db = null)
{
    return $this->queryScalar("MIN($q)", $db);
}

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

禁用此 Query 的查询缓存。

public $this noCache ( )
返回值 $this

查询对象本身

                public function noCache()
{
    $this->queryCacheDuration = -1;
    return $this;
}

            
normalizeOrderBy() 受保护方法

定义于: yii\db\QueryTrait::normalizeOrderBy()

规范化 ORDER BY 数据的格式。

protected array normalizeOrderBy ( $columns )
$columns array|string|yii\db\ExpressionInterface|null

要规范化的列值。参见 orderBy()addOrderBy()

                protected function normalizeOrderBy($columns)
{
    if (empty($columns)) {
        return [];
    } elseif ($columns instanceof ExpressionInterface) {
        return [$columns];
    } elseif (is_array($columns)) {
        return $columns;
    }
    $columns = preg_split('/\s*,\s*/', trim($columns), -1, PREG_SPLIT_NO_EMPTY);
    $result = [];
    foreach ($columns as $column) {
        if (preg_match('/^(.*?)\s+(asc|desc)$/i', $column, $matches)) {
            $result[$matches[1]] = strcasecmp($matches[2], 'desc') ? SORT_ASC : SORT_DESC;
        } else {
            $result[$column] = SORT_ASC;
        }
    }
    return $result;
}

            
normalizeSelect() 受保护方法 (自版本 2.0.21 起可用)

规范化传递给 select()addSelect() 的 SELECT 列。

protected array normalizeSelect ( $columns )
$columns string|array|yii\db\ExpressionInterface

                protected function normalizeSelect($columns)
{
    if ($columns instanceof ExpressionInterface) {
        $columns = [$columns];
    } elseif (!is_array($columns)) {
        $columns = preg_split('/\s*,\s*/', trim((string)$columns), -1, PREG_SPLIT_NO_EMPTY);
    }
    $select = [];
    foreach ($columns as $columnAlias => $columnDefinition) {
        if (is_string($columnAlias)) {
            // Already in the normalized format, good for them
            $select[$columnAlias] = $columnDefinition;
            continue;
        }
        if (is_string($columnDefinition)) {
            if (
                preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $columnDefinition, $matches) &&
                !preg_match('/^\d+$/', $matches[2]) &&
                strpos($matches[2], '.') === false
            ) {
                // Using "columnName as alias" or "columnName alias" syntax
                $select[$matches[2]] = $matches[1];
                continue;
            }
            if (strpos($columnDefinition, '(') === false) {
                // Normal column name, just alias it to itself to ensure it's not selected twice
                $select[$columnDefinition] = $columnDefinition;
                continue;
            }
        }
        // Either a string calling a function, DB expression, or sub-query
        $select[] = $columnDefinition;
    }
    return $select;
}

            
off() 公共方法

定义于: yii\base\Component::off()

从该组件中分离现有的事件处理程序。

此方法与 on() 相反。

注意:如果为事件名称传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的普通名称注册的处理程序将保留。

另请参阅 on()

public boolean off ( $name, $handler null )
$name 字符串

事件名称

$handler callable|null

要移除的事件处理程序。如果为 null,则将移除附加到命名事件的所有处理程序。

返回值 boolean

如果找到并分离了一个处理程序

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
offset() 公共方法

定义于: yii\db\QueryTrait::offset()

设置查询语句的 OFFSET 部分。

public $this offset ( $offset )
$offset 整数|yii\db\ExpressionInterface|

偏移量。使用 null 或负值禁用偏移量。

返回值 $this

查询对象本身

                public function offset($offset)
{
    $this->offset = $offset;
    return $this;
}

            
on() 公共方法

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是一个有效的 PHP 回调。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须使用以下签名定义,

function ($event)

其中$event是一个yii\base\Event对象,其中包含与事件关联的参数。

从 2.0.14 开始,您可以将事件名称指定为通配符模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另请参阅 off()

public void on ( $name, $handler, $data null, $append true )
$name 字符串

事件名称

$handler callable

事件处理程序

$data mixed

触发事件时要传递给事件处理程序的数据。调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append boolean

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 false,则新处理程序将插入到现有处理程序列表的开头。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
one() 公共方法

执行查询并返回结果集的一行。

public array|boolean one ( $db null )
$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 array|boolean

查询结果的第一行(以数组形式表示)。如果查询结果为空,则返回 false。

                public function one($db = null)
{
    if ($this->emulateExecution) {
        return false;
    }
    return $this->createCommand($db)->queryOne();
}

            
orFilterHaving() 公共方法 (自版本 2.0.11 起可用)

向现有 HAVING 条件添加其他条件,但忽略 空操作数

新条件和现有条件将使用OR运算符连接。

此方法类似于 orHaving()。主要区别在于此方法将移除 空的查询操作数。因此,此方法最适合根据用户输入的筛选值构建查询条件。

另请参阅

public $this orFilterHaving ( array $condition )
$condition array

新的 HAVING 条件。有关如何指定此参数,请参阅 having()

返回值 $this

查询对象本身

                public function orFilterHaving(array $condition)
{
    $condition = $this->filterCondition($condition);
    if ($condition !== []) {
        $this->orHaving($condition);
    }
    return $this;
}

            
orFilterWhere() 公共方法

定义于: yii\db\QueryTrait::orFilterWhere()

向现有 WHERE 条件添加其他条件,但忽略 空操作数

新条件和现有条件将使用“OR”运算符连接。

此方法类似于 orWhere()。主要区别在于此方法将删除 空查询操作数。因此,此方法最适合根据用户输入的筛选值构建查询条件。

另请参阅

public $this orFilterWhere ( array $condition )
$condition array

新的 WHERE 条件。有关如何指定此参数,请参阅 where()

返回值 $this

查询对象本身

                public function orFilterWhere(array $condition)
{
    $condition = $this->filterCondition($condition);
    if ($condition !== []) {
        $this->orWhere($condition);
    }
    return $this;
}

            
orHaving() 公共方法

向现有 HAVING 条件添加其他条件。

新条件和现有条件将使用OR运算符连接。

另请参阅

public $this orHaving ( $condition, $params = [] )
$condition string|array|yii\db\ExpressionInterface

新的 HAVING 条件。请参考 where() 如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function orHaving($condition, $params = [])
{
    if ($this->having === null) {
        $this->having = $condition;
    } else {
        $this->having = ['or', $this->having, $condition];
    }
    $this->addParams($params);
    return $this;
}

            
orWhere() 公共方法

向现有 WHERE 条件添加其他条件。

新条件和现有条件将使用OR运算符连接。

另请参阅

public $this orWhere ( $condition, $params = [] )
$condition string|array|yii\db\ExpressionInterface

新的 WHERE 条件。请参考 where() 如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function orWhere($condition, $params = [])
{
    if ($this->where === null) {
        $this->where = $condition;
    } else {
        $this->where = ['or', $this->where, $condition];
    }
    $this->addParams($params);
    return $this;
}

            
orderBy() 公共方法

定义于: yii\db\QueryTrait::orderBy()

设置查询语句的 ORDER BY 部分。

另请参阅 addOrderBy()

public $this orderBy ( $columns )
$columns 字符串|数组|yii\db\ExpressionInterface|

要按其排序的列(和方向)。列可以用字符串(例如 "id ASC, name DESC")或数组(例如 ['id' => SORT_ASC, 'name' => SORT_DESC])指定。

除非列包含一些括号(这意味着列包含 DB 表达式),否则该方法将自动引用列名。

请注意,如果您的 order-by 是包含逗号的表达式,则应始终使用数组来表示 order-by 信息。否则,该方法将无法正确确定 order-by 列。

从 2.0.7 版本开始,可以传递一个 yii\db\ExpressionInterface 对象以明确地用纯 SQL 指定 ORDER BY 部分。

返回值 $this

查询对象本身

                public function orderBy($columns)
{
    $this->orderBy = $this->normalizeOrderBy($columns);
    return $this;
}

            
params() 公共方法

设置要绑定到查询语句的参数。

另请参阅 addParams()

public $this params ( $params )
$params array

查询参数值的列表,以参数占位符为索引。例如,[':name' => 'Dan', ':age' => 31]

返回值 $this

查询对象本身

                public function params($params)
{
    $this->params = $params;
    return $this;
}

            
populate() 公共方法

将原始查询结果转换为根据此查询指定的格式。

此方法在内部用于将从数据库中获取的数据转换为此查询所需的格式。

public array populate ( $rows )
$rows array

来自数据库的原始查询结果

返回值 array

转换后的查询结果

                public function populate($rows)
{
    if ($this->indexBy === null) {
        return $rows;
    }
    $result = [];
    foreach ($rows as $row) {
        $result[ArrayHelper::getValue($row, $this->indexBy)] = $row;
    }
    return $result;
}

            
prepare() 公共方法

准备构建 SQL。

yii\db\QueryBuilder 开始从查询对象构建 SQL 时,此方法会被调用。您可以重写此方法,以便在将查询转换为 SQL 语句时执行一些最终的准备工作。

public $this prepare ( $builder )
$builder yii\db\QueryBuilder
返回值 $this

一个准备好的查询实例,yii\db\QueryBuilder 将使用它来构建 SQL

                public function prepare($builder)
{
    return $this;
}

            
queryScalar() 受保护方法

通过首先设置 select() 来查询标量值。

恢复 select 的值以使此查询可重用。

protected boolean|string|null queryScalar ( $selectExpression, $db )
$selectExpression string|yii\db\ExpressionInterface
$db yii\db\Connection|null

用于执行查询的数据库连接。

抛出异常 Throwable

如果无法创建命令

                protected function queryScalar($selectExpression, $db)
{
    if ($this->emulateExecution) {
        return null;
    }
    if (
        !$this->distinct
        && empty($this->groupBy)
        && empty($this->having)
        && empty($this->union)
    ) {
        $select = $this->select;
        $order = $this->orderBy;
        $limit = $this->limit;
        $offset = $this->offset;
        $this->select = [$selectExpression];
        $this->orderBy = null;
        $this->limit = null;
        $this->offset = null;
        $e = null;
        try {
            $command = $this->createCommand($db);
        } catch (\Exception $e) {
            // throw it later (for PHP < 7.0)
        } catch (\Throwable $e) {
            // throw it later
        }
        $this->select = $select;
        $this->orderBy = $order;
        $this->limit = $limit;
        $this->offset = $offset;
        if ($e !== null) {
            throw $e;
        }
        return $command->queryScalar();
    }
    $command = (new self())
        ->select([$selectExpression])
        ->from(['c' => $this])
        ->createCommand($db);
    $this->setCommandCache($command);
    return $command->queryScalar();
}

            
rightJoin() 公共方法

将 RIGHT OUTER JOIN 部分添加到查询语句中。

public $this rightJoin ( $table, $on '', $params = [] )
$table string|array

要连接的表或子查询。

使用字符串表示要连接的表的名称。表名可以包含模式前缀(例如 'public.user')和/或表别名(例如 'user u')。该方法会自动引用表名,除非它包含一些括号(这意味着表作为子查询或数据库表达式给出)。

您还可以将表指定为包含一个元素的数组,使用数组键作为表别名(例如 ['u' => 'user'])。

要连接子查询,请使用包含一个元素的数组,并将值设置为表示子查询的 yii\db\Query 对象,以及表示别名的相应键。

$on string|array

应出现在 ON 部分的连接条件。请参阅 join() 以了解如何指定此参数。

$params array

要绑定到查询的参数(名称 => 值)

返回值 $this

查询对象本身

                public function rightJoin($table, $on = '', $params = [])
{
    $this->join[] = ['RIGHT JOIN', $table, $on];
    return $this->addParams($params);
}

            
scalar() 公共方法

将查询结果作为标量值返回。

返回值将是查询结果第一行中的第一列。

public string|integer|null|false scalar ( $db null )
$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 string|integer|null|false

查询结果第一行中的第一列的值。如果查询结果为空,则返回 false。

                public function scalar($db = null)
{
    if ($this->emulateExecution) {
        return null;
    }
    return $this->createCommand($db)->queryScalar();
}

            
select() 公共方法

设置查询语句的 SELECT 部分。

public $this select ( $columns, $option null )
$columns string|array|yii\db\ExpressionInterface

要选择的列。列可以用字符串(例如“id, name”)或数组(例如['id', 'name'])指定。列可以以表名前缀(例如“user.id”)和/或包含列别名(例如“user.id AS user_id”)。除非列包含一些括号(这意味着列包含 DB 表达式),否则此方法将自动引用列名。DB 表达式也可以以 yii\db\ExpressionInterface 对象的形式传递。

请注意,如果您选择像 CONCAT(first_name, ' ', last_name) 这样的表达式,则应使用数组来指定列。否则,表达式可能会被错误地拆分为多个部分。

当列以数组的形式指定时,您也可以使用数组键作为列别名(如果列不需要别名,则不要使用字符串键)。

从 2.0.1 版本开始,您还可以通过将每列指定为表示子查询的 Query 实例来选择子查询作为列。

$option

字符串|

应附加到“SELECT”关键字的其他选项。例如,在 MySQL 中,可以使用“SQL_CALC_FOUND_ROWS”选项。

返回值 $this

查询对象本身

                public function select($columns, $option = null)
{
    $this->select = $this->normalizeSelect($columns);
    $this->selectOption = $option;
    return $this;
}

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

设置 $command 缓存,如果此查询已启用缓存。

受保护 yii\db\Command setCommandCache ( $command )
$command yii\db\Command

                protected function setCommandCache($command)
{
    if ($this->queryCacheDuration !== null || $this->queryCacheDependency !== null) {
        $duration = $this->queryCacheDuration === true ? null : $this->queryCacheDuration;
        $command->cache($duration, $this->queryCacheDependency);
    }
    return $command;
}

            
sum() 公共方法

返回指定列值的总和。

公共 混合 sum ( $q, $db null )
$q 字符串

列名或表达式。确保在表达式中正确地 引用 列名。

$db yii\db\Connection|null

用于生成 SQL 语句的数据库连接。如果未提供此参数,则将使用db应用程序组件。

返回值 mixed

指定列值的总和。

                public function sum($q, $db = null)
{
    if ($this->emulateExecution) {
        return 0;
    }
    return $this->queryScalar("SUM($q)", $db);
}

            
trigger() 公共方法

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用事件的所有附加处理程序,包括类级处理程序。

公共 trigger ( $name, yii\base\Event $event null )
$name 字符串

事件名称

$event yii\base\Event|null

事件实例。如果未设置,将创建一个默认的 yii\base\Event 对象。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
union() 公共方法

使用 UNION 运算符追加 SQL 语句。

公共 $this union ( $sql, $all false )
$sql 字符串|yii\db\Query

使用 UNION 附加的 SQL 语句

$all boolean

使用 UNION ALL 时为 TRUE,使用 UNION 时为 FALSE

返回值 $this

查询对象本身

                public function union($sql, $all = false)
{
    $this->union[] = ['query' => $sql, 'all' => $all];
    return $this;
}

            
where() 公共方法

设置查询语句的 WHERE 部分。

此方法需要一个 $condition 参数,并可以选择一个 $params 参数,指定要绑定到查询的值。

$condition 参数应为字符串(例如 'id=1')或数组。

{@inheritdoc}

另请参阅

公共 $this where ( $condition, $params = [] )
$condition string|array|yii\db\ExpressionInterface

应放在 WHERE 部分的条件。

$params array

要绑定到查询的参数(名称 => 值)。

返回值 $this

查询对象本身

                public function where($condition, $params = [])
{
    $this->where = $condition;
    $this->addParams($params);
    return $this;
}

            
withQuery() 公共方法 (自版本 2.0.35 起可用)

使用 WITH 语法前置 SQL 语句。

公共 $this withQuery ( $query, $alias, $recursive false )
$query 字符串|yii\db\Query

使用 WITH 前缀的 SQL 语句

$alias 字符串

WITH 结构中的查询别名

$recursive boolean

使用 WITH RECURSIVE 时为 TRUE,使用 WITH 时为 FALSE

返回值 $this

查询对象本身

                public function withQuery($query, $alias, $recursive = false)
{
    $this->withQueries[] = ['query' => $query, 'alias' => $alias, 'recursive' => $recursive];
    return $this;
}