Yii2实现命名范围scope的自定义查询
时间: 2024-01-06 12:04:15 浏览: 30
在 Yii2 中,可以使用命名范围(scope)来定义一些常用的查询条件,这些查询条件可以在整个应用程序中被复用,避免了代码的重复编写。下面是一个实现命名范围的示例:
假设我们有一个 User 模型,其中包含了一个 status 字段,表示用户的状态(0 表示禁用,1 表示启用)。我们希望定义一个命名范围,用于查询启用状态的用户,可以在 User 模型中添加如下代码:
```php
public function scopes()
{
return [
'enabled' => function ($query) {
$query->andWhere(['status' => 1]);
},
];
}
```
上面的代码中,我们定义了一个名为 enabled 的命名范围,它接受一个查询对象 $query 作为参数,并在查询中添加了一个条件,即 status 字段等于 1。
现在,我们可以在任何需要查询启用状态的用户的地方,使用以下代码:
```php
$enabledUsers = User::find()->enabled()->all();
```
这里的 enabled() 就是我们刚刚定义的命名范围,它会返回一个已经添加了查询条件的查询对象,从而实现了我们的需求。
除了使用匿名函数来定义命名范围之外,还可以使用数组来定义,例如:
```php
public function scopes()
{
return [
'enabled' => [
'condition' => ['status' => 1],
],
];
}
```
这种方式与使用匿名函数的方式效果是一样的,只是语法上有些不同。