Yii2 高级查询

Yii · forecho · 于 4年前 发布 · 8838 次阅读

原文:Yii2 Select Query : Advanced

原文的方法其实是错的,下面我们来谈谈正确的写法

首先我们要自己写一个ActiveQuery 类并且继承 Yii2 的 ActiveQuery:

namespace api\models;

class ActiveQuery extends \yii\db\ActiveQuery
{
    const STATUS_ACTIVE = 0;

    public function active()
    {
        $this->andWhere(['status' => self::STATUS_ACTIVE]);
        return $this;
    }
}

然后要在 User Model 里面复写 find 方法:

public static function find()
{
     return new ActiveQuery(get_called_class());
}

这样我们就可以在控制器中就可以这样用了:

User::find()->active()->all()

PS: 当然如果要细分的话可以自己写一个 UserQuery 继承 ActiveQuery 而不是写一个ActiveQuery继承ActiveQuery。

可以参考 huajuan 的代码。 最后感谢 @yiqing

本帖已被设为精华帖!
共收到 1 条回复 Bsourcecode Yii2高级用法
dcb9#14年前 0 个赞
 public function active()
    {
     //   $this->andWhere(['status' => self::STATUS_ACTIVE]);
     //   return $this;
        可以直接写成 
        return $this->andWhere(['status' => self::STATUS_ACTIVE]);
    }

因为 andWhere 的返回值就是当前对象

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册