backend\models\Member.php
<?php
namespace backend\models;
use Yii;
class Member extends \yii\db\ActiveRecord {
public $orderCount;
public static function tableName() {
return '{{%member}}';
}
public function rules() {
//省略
}
public function attributeLabels() {
//省略
}
/**
* 用户表和订单表是一对多的关系
*/
public function getOrders() {
return $this->hasMany(Order::className(), ['member_id' => 'id']);
}
}
backend\models\MemberSearch.php
<?php
namespace backend\models;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
class MemberSearch extends Member {
public $orderCount;
public function rules() {
return [
//其他的rule省略了
[['orderCount'], 'integer'],
];
}
public function scenarios() {
return Model::scenarios();
}
public function search($params) {
$query = Member::find()->select([
'member.*',
'(select count(order.id) from order where order.member_id = member.id) as orderCount',
]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder' => ['id' => SORT_DESC]],
'pagination' => [
'pageSize' => 20
],
]);
$dataProvider->sort->attributes['orderCount'] = [
'asc' => ['orderCount' => SORT_ASC],
'desc' => ['orderCount' => SORT_DESC],
];
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->having(['orderCount' => $this->orderCount]); //根据用户的订单数进行筛选(一般是用户订单数的范围,我这里为了简单,写了个=)
return $dataProvider;
}
}
member\index.php
<?=
GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
[
'label' => '订单数量',
'attribute' => 'orderCount',
],
],
]);
?>
希望可以帮到大家