多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
> 有时候查询某条数据时候,需要用到的条件很多,很繁琐时,建议将这些条件封装起来,供activequery使用。 > 我们这里就拿“订单表”来举例。比如订单状态“待支付”、‘可消费’、“已支付”等等各种条件。而且这些状态条件在很多地方都会同时用到,所以就可以考虑进行封装了。 [TOC] #### 1. 创建OrderQuery ~~~ namespace common\models; class OrderQuery extends ActiveQuery { //可消费状态筛选 public function queryCanConsumeStatus() { return $this->andWhere(['or', ['status' => 1], ['status' => 3], ['status' => 6], ]); } //已支付状态筛选 public function queryPayedStatus() { return $this->andWhere(['status' => 8]); } //待支付状态筛选 public function queryUnpayedStatus() { return $this->andWhere(['status' => 2]); } } ~~~ #### 2. Order Model中使其支持OrderQuery ~~~ class Order extends \yii\db\ActiveRecord { public static function tableName() { return 'order'; } public static function find() { return new OrderQuery(get_called_class()); } } ~~~ #### 3. Controller中使用示例 ~~~ $list = Order::find()->where(['customer_id'=>$customerId])->queryCanConsumeStatus()->list(); var_dump($list); ~~~