1 关注者

接口 yii\db\QueryInterface

实现于yii\db\ActiveQuery, yii\db\ActiveQueryInterface, yii\db\Query
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/QueryInterface.php

QueryInterface 定义了数据库查询需要实现的最小方法集。

该接口的默认实现由 yii\db\QueryTrait 提供。

它支持获取 one() 实例或 all()。允许通过 limit()offset() 进行分页。排序通过 orderBy() 支持,并且可以使用 where() 将项目限制为匹配某些条件。

公共方法

隐藏继承的方法

方法 描述 定义于
addOrderBy() 向查询中添加额外的 ORDER BY 列。 yii\db\QueryInterface
all() 执行查询并将所有结果作为数组返回。 yii\db\QueryInterface
andFilterWhere() 向现有条件添加一个额外的 WHERE 条件,忽略空参数。 yii\db\QueryInterface
andWhere() 向现有条件添加一个额外的 WHERE 条件。 yii\db\QueryInterface
count() 返回记录数。 yii\db\QueryInterface
emulateExecution() 设置是否模拟查询执行,防止与数据存储交互。 yii\db\QueryInterface
exists() 返回值指示查询结果是否包含任何数据行。 yii\db\QueryInterface
filterWhere() 设置查询的 WHERE 部分,忽略空参数。 yii\db\QueryInterface
indexBy() 设置 indexBy() 属性。 yii\db\QueryInterface
limit() 设置查询的 LIMIT 部分。 yii\db\QueryInterface
offset() 设置查询的 OFFSET 部分。 yii\db\QueryInterface
one() 执行查询并返回一行结果。 yii\db\QueryInterface
orFilterWhere() 向现有条件添加一个额外的 WHERE 条件,忽略空参数。 yii\db\QueryInterface
orWhere() 向现有条件添加一个额外的 WHERE 条件。 yii\db\QueryInterface
orderBy() 设置查询的 ORDER BY 部分。 yii\db\QueryInterface
where() 设置查询的 WHERE 部分。 yii\db\QueryInterface

方法详情

隐藏继承的方法

addOrderBy() public abstract method

向查询中添加额外的 ORDER BY 列。

另请参阅 orderBy()

public abstract $this addOrderBy ( $columns )
$columns string|array

要按其排序的列(以及方向)。列可以以字符串(例如“id ASC, name DESC”)或数组(例如['id' => SORT_ASC, 'name' => SORT_DESC])的形式指定。除非列包含一些括号(这意味着列包含数据库表达式),否则该方法将自动引用列名。

返回值 $this

查询对象本身

                public function addOrderBy($columns);

            
all() public abstract method

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

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

用于执行查询的数据库连接。如果未给出此参数,则将使用db应用程序组件。

返回值 array

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

                public function all($db = null);

            
andFilterWhere() public abstract method

向现有条件添加一个额外的 WHERE 条件,忽略空参数。

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

另请参阅

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

新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。

返回值 $this

查询对象本身

                public function andFilterWhere(array $condition);

            
andWhere() public abstract method

向现有条件添加一个额外的 WHERE 条件。

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

另请参阅

public abstract $this andWhere ( $condition )
$condition array

新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。

返回值 $this

查询对象本身

                public function andWhere($condition);

            
count() public abstract method

返回记录数。

public abstract 整数|字符串|null count ( $q '*', $db null )
$q 字符串

COUNT 表达式。默认为 '*'。

$db yii\db\Connection|null

用于执行查询的数据库连接。如果未给出此参数,则将使用db应用程序组件。

返回值 整数|字符串|null

记录数。

                public function count($q = '*', $db = null);

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

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

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

public abstract $this emulateExecution ( $value true )
$value 布尔值

是否阻止查询执行。

返回值 $this

查询对象本身。

                public function emulateExecution($value = true);

            
exists() 公共抽象方法

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

public abstract 布尔值 exists ( $db null )
$db yii\db\Connection|null

用于执行查询的数据库连接。如果未给出此参数,则将使用db应用程序组件。

返回值 布尔值

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

                public function exists($db = null);

            
filterWhere() 公共抽象方法

设置查询的 WHERE 部分,忽略空参数。

另请参阅

public abstract $this filterWhere ( 数组 $condition )
$condition array

应放在 WHERE 部分的条件。请参阅 where() 以了解如何指定此参数。

返回值 $this

查询对象本身

                public function filterWhere(array $condition);

            
indexBy() 公共抽象方法

设置 indexBy() 属性。

public abstract $this indexBy ( $column )
$column 字符串|可调用

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

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

查询对象本身

                public function indexBy($column);

            
limit() 公共抽象方法

设置查询的 LIMIT 部分。

public abstract $this limit ( $limit )
$limit 整数|null

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

返回值 $this

查询对象本身

                public function limit($limit);

            
offset() 公共抽象方法

设置查询的 OFFSET 部分。

public abstract $this offset ( $offset )
$offset 整数|null

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

返回值 $this

查询对象本身

                public function offset($offset);

            
one() 公共抽象方法

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

public abstract 数组|布尔值 one ( $db null )
$db yii\db\Connection|null

用于执行查询的数据库连接。如果未给出此参数,则将使用db应用程序组件。

返回值 数组|布尔值

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

                public function one($db = null);

            
orFilterWhere() 公共抽象方法

向现有条件添加一个额外的 WHERE 条件,忽略空参数。

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

另请参阅

public abstract $this orFilterWhere ( 数组 $condition )
$condition array

新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。

返回值 $this

查询对象本身

                public function orFilterWhere(array $condition);

            
orWhere() 公共抽象方法

向现有条件添加一个额外的 WHERE 条件。

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

另请参阅

public abstract $this orWhere ( $condition )
$condition array

新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。

返回值 $this

查询对象本身

                public function orWhere($condition);

            
orderBy() 公共抽象方法

设置查询的 ORDER BY 部分。

另请参阅 addOrderBy()

public abstract $this orderBy ( $columns )
$columns string|array

要按其排序的列(以及方向)。列可以以字符串(例如“id ASC, name DESC”)或数组(例如['id' => SORT_ASC, 'name' => SORT_DESC])的形式指定。除非列包含一些括号(这意味着列包含数据库表达式),否则该方法将自动引用列名。

返回值 $this

查询对象本身

                public function orderBy($columns);

            
where() 公共抽象方法

设置查询的 WHERE 部分。

指定为数组的$condition可以采用以下两种格式之一

  • 哈希格式:['column1' => value1, 'column2' => value2, ...]
  • 运算符格式:[operator, operand1, operand2, ...]

哈希格式的条件通常表示以下 SQL 表达式:column1=value1 AND column2=value2 AND ...。如果值是数组,则会生成一个IN表达式。如果值是null,则在生成的表达式中将使用IS NULL。以下是一些示例

  • ['type' => 1, 'status' => 2] 生成 (type = 1) AND (status = 2)
  • ['id' => [1, 2, 3], 'status' => 2] 生成 (id IN (1, 2, 3)) AND (status = 2)
  • ['status' => null] 生成 status IS NULL

运算符格式的条件根据指定的运算符生成 SQL 表达式,运算符可以是以下之一

  • and:操作数应使用AND连接在一起。例如,['and', 'id=1', 'id=2']将生成id=1 AND id=2。如果操作数是一个数组,它将根据此处描述的规则转换为字符串。例如,['and', 'type=1', ['or', 'id=1', 'id=2']]将生成type=1 AND (id=1 OR id=2)。此方法不会进行任何引用或转义。

  • or:类似于and运算符,只是操作数使用OR连接在一起。例如,['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]]将生成(type IN (7, 8, 9) OR (id IN (1, 2, 3)))

  • not:这将只接受一个操作数,并通过在查询字符串前添加NOT来构建其否定。例如['not', ['attribute' => null]]将生成条件NOT (attribute IS NULL)

  • between:操作数1应为列名,操作数2和3应为列所在的范围的起始值和结束值。例如,['between', 'id', 1, 10]将生成id BETWEEN 1 AND 10

  • not between:类似于between,只是生成的条件中BETWEEN被替换为NOT BETWEEN

  • in:操作数1应为列或数据库表达式,操作数2应为表示列或数据库表达式应在其中的值的范围的数组。例如,['in', 'id', [1, 2, 3]]将生成id IN (1, 2, 3)。此方法将正确引用列名并转义范围内的值。

    要创建复合IN条件,您可以使用列名和值的数组,其中值按列名索引:['in', ['id', 'name'], [['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']] ]

    您还可以指定一个子查询,用于获取IN条件的值:['in', 'user_id', (new Query())->select('id')->from('users')->where(['active' => 1])]

  • not in:类似于in运算符,只是生成的条件中IN被替换为NOT IN

  • like:操作数1应为列或数据库表达式,操作数2应为字符串或表示列或数据库表达式应类似的值的数组。例如,['like', 'name', 'tester']将生成name LIKE '%tester%'。当值范围作为数组给出时,将生成多个LIKE谓词,并使用AND连接在一起。例如,['like', 'name', ['test', 'sample']]将生成name LIKE '%test%' AND name LIKE '%sample%'。此方法将正确引用列名并转义值中的特殊字符。有时,您可能希望自己向匹配值添加百分号字符,您可以提供第三个操作数false来执行此操作。例如,['like', 'name', '%tester', false]将生成name LIKE '%tester'

  • or like:类似于like运算符,只是当操作数2为数组时,使用OR连接LIKE谓词。

  • not like:类似于like运算符,只是生成的条件中LIKE被替换为NOT LIKE

  • or not like:类似于not like运算符,只是使用OR连接NOT LIKE谓词。

  • exists:操作数1是一个查询对象,用于构建EXISTS条件。例如['exists', (new Query())->select('id')->from('users')->where(['active' => 1])]将生成以下SQL表达式:EXISTS (SELECT "id" FROM "users" WHERE "active"=1)

  • not exists:类似于exists运算符,只是生成的条件中EXISTS被替换为NOT EXISTS

  • 此外,您可以按如下方式指定任意运算符:条件['>=', 'id', 10]将生成以下SQL表达式:id >= 10

请注意,此方法将覆盖任何现有的WHERE条件。您可能希望改用andWhere()orWhere()

另请参阅

public abstract $this where ( $condition )
$condition array

应放在WHERE部分中的条件。

返回值 $this

查询对象本身

                public function where($condition);