Сортировки по сложно вычисляемым полям.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Alexandr
Сообщения: 8
Зарегистрирован: 2017.01.21, 20:56

Сортировки по сложно вычисляемым полям.

Сообщение Alexandr »

Всем доброго времени суток! Помогите начинающему программисту.
Стоит задача сделать сортировку постов: за 1-день, за 6-дней, за 30-дней, за всё время.
По моему примеру работает только сортировка "за всё время".

Есть 2-е таблички. user и statistics_post(id, user_id, post, date(в формате"2016-11-24")).

Модель SearchUser.

Код: Выделить всё

$query = User::find()
            ->select(['{{%user}}.*',
                'post_total'=> new Expression('COUNT({{%statistics_post}}.id)'), // Работает
                // А дальше я фантазировал как мог :), но всё впустую...
                'post_day' => new Expression('COUNT({{%statistics_post}}.id)', ['where'=>'TO_DAYS(NOW()) - TO_DAYS({{%statistics_post}}.date) < 1']),   
                'post_week' => ...,
                'post_month' => ...,
            ])
            ->joinWith(['statistics']) // связь hasMany.
            ->groupBy('{{%user}}.id');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'sort' => [
                'defaultOrder' => ['post_total'=>SORT_DESC],
                'attributes'=>[
                    'post_day'
                    'post_week'
                    'post_month
                    'post_total',
                ]
            ]
        ]);
P.S. Буду рад любому, рабочему способу! :)
Спасибо!
Ответить