Добрый день. Есть таблица
Profile со связанными полисами
public function getPolicy() {
return $this->hasMany(Policy::class, ['user_id' => 'user_id'])
->where(['status' => 'payed']);
}
На сайте устроена система куратор-агент-оператор. Надо, отталкиваясь от куратора получать проданные полисы всей сети, выводить в GridView и сортировать по этому полю. Просто с выводом проблем нет, но с сортировкой есть, т.к. поле скалькулированное.
Механизм поиска всех полисов сети следующий:
public function getCount() {
if (!empty(Yii::$app->request->get('period'))) {
$period = Yii::$app->request->get('period');
if (strpos($period, ' - ') !== false) {
[$start_date, $end_date] = explode(' - ', $period);
$start_date = date('Y.m.d', strtotime('midnight', strtotime($start_date)));
$end_date = date('Y.m.d H:i:s', strtotime('tomorrow', strtotime($end_date)) - 1);
}
}
$agents = User::getChildrenSQL($this->user_id);
$usersChild = ArrayHelper::getColumn($agents, function ($element) {
return (int)$element['id'];
});
$usersChild[] = $this->user_id;
if (empty(Yii::$app->request->get('period'))) {
$policies = Policy::find()->where(['IN', 'user_id', $usersChild])
->andWhere(['status' => 'payed'])->all();
} else {
$policies = Policy::find()->where(['IN', 'user_id', $usersChild])
->andWhere(['status' => 'payed'])->andWhere(['between', 'payed_date', $start_date, $end_date])->all();
}
return count($policies);
}
В searhModel public $count;
[ [ 'count' ], 'safe' ],
$dataProvider->setSort([
'attributes'=>[
'count' => [
'asc'=>['count'=>SORT_ASC,],
'desc'=>['count'=>SORT_DESC],
'default' => SORT_DESC
],
]
]);
Поле вывести получается, но сортировки, естественно нет. Много примеров перебрал. Сортировать получается только при использовании ArrayDataProvider, но мне бы желательно все-таки Active. Подскажите в каком направлении двигаться? Спасибо.