接口 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 |
方法详情
向查询中添加额外的 ORDER BY 列。
另请参阅 orderBy()。
public abstract $this addOrderBy ( $columns ) | ||
$columns | string|array |
要按其排序的列(以及方向)。列可以以字符串(例如“id ASC, name DESC”)或数组(例如 |
返回值 | $this |
查询对象本身 |
---|
public function addOrderBy($columns);
执行查询并将所有结果作为数组返回。
public abstract array all ( $db = null ) | ||
$db | yii\db\Connection|null |
用于执行查询的数据库连接。如果未给出此参数,则将使用 |
返回值 | array |
查询结果。如果查询结果为空,则将返回空数组。 |
---|
public function all($db = null);
public abstract $this andFilterWhere ( array $condition ) | ||
$condition | array |
新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。 |
返回值 | $this |
查询对象本身 |
---|
public function andFilterWhere(array $condition);
public abstract $this andWhere ( $condition ) | ||
$condition | array |
新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。 |
返回值 | $this |
查询对象本身 |
---|
public function andWhere($condition);
返回记录数。
public abstract 整数|字符串|null count ( $q = '*', $db = null ) | ||
$q | 字符串 |
COUNT 表达式。默认为 '*'。 |
$db | yii\db\Connection|null |
用于执行查询的数据库连接。如果未给出此参数,则将使用 |
返回值 | 整数|字符串|null |
记录数。 |
---|
public function count($q = '*', $db = null);
设置是否模拟查询执行,防止与数据存储交互。
启用此模式后,返回查询结果的方法(如 one()、all()、exists() 等)将返回空值或 false。如果您的程序逻辑指示查询不应返回任何结果,例如在您设置错误的 where 条件(如 0=1
)的情况下,您应该使用此方法。
public abstract $this emulateExecution ( $value = true ) | ||
$value | 布尔值 |
是否阻止查询执行。 |
返回值 | $this |
查询对象本身。 |
---|
public function emulateExecution($value = true);
返回值指示查询结果是否包含任何数据行。
public abstract 布尔值 exists ( $db = null ) | ||
$db | yii\db\Connection|null |
用于执行查询的数据库连接。如果未给出此参数,则将使用 |
返回值 | 布尔值 |
查询结果是否包含任何行数据。 |
---|
public function exists($db = null);
public abstract $this filterWhere ( 数组 $condition ) | ||
$condition | array |
应放在 WHERE 部分的条件。请参阅 where() 以了解如何指定此参数。 |
返回值 | $this |
查询对象本身 |
---|
public function filterWhere(array $condition);
设置 indexBy() 属性。
public abstract $this indexBy ( $column ) | ||
$column | 字符串|可调用 |
查询结果应按其索引的列的名称。这也可以是一个可调用对象(例如匿名函数),它根据给定的行数据返回索引值。可调用对象的签名应为
|
返回值 | $this |
查询对象本身 |
---|
public function indexBy($column);
设置查询的 LIMIT 部分。
public abstract $this limit ( $limit ) | ||
$limit | 整数|null |
限制。使用 null 或负值禁用限制。 |
返回值 | $this |
查询对象本身 |
---|
public function limit($limit);
设置查询的 OFFSET 部分。
public abstract $this offset ( $offset ) | ||
$offset | 整数|null |
偏移量。使用 null 或负值禁用偏移量。 |
返回值 | $this |
查询对象本身 |
---|
public function offset($offset);
执行查询并返回一行结果。
public abstract 数组|布尔值 one ( $db = null ) | ||
$db | yii\db\Connection|null |
用于执行查询的数据库连接。如果未给出此参数,则将使用 |
返回值 | 数组|布尔值 |
查询结果的第一行(以数组形式表示)。如果查询结果为空,则返回 false。 |
---|
public function one($db = null);
public abstract $this orFilterWhere ( 数组 $condition ) | ||
$condition | array |
新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。 |
返回值 | $this |
查询对象本身 |
---|
public function orFilterWhere(array $condition);
public abstract $this orWhere ( $condition ) | ||
$condition | array |
新的 WHERE 条件。请参阅 where() 以了解如何指定此参数。 |
返回值 | $this |
查询对象本身 |
---|
public function orWhere($condition);
设置查询的 ORDER BY 部分。
另请参阅 addOrderBy()。
public abstract $this orderBy ( $columns ) | ||
$columns | string|array |
要按其排序的列(以及方向)。列可以以字符串(例如“id ASC, name DESC”)或数组(例如 |
返回值 | $this |
查询对象本身 |
---|
public function orderBy($columns);
设置查询的 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);
注册或登录以发表评论。