Поле ранжирования Laravel, как использовать переменные множества в MySQL?

у меня есть users таблица с целочисленным полем ep,

Теперь я хочу получить всех пользователей из определенной группы, упорядоченной по полю EP, и сгенерированным полем MySQL под названием rank,

Вот что я попробовал:

DB::transaction(function()
{
DB::statement("SET @rank:=0");
$group = Sentry::findGroupByName('Player');
$users = Sentry::getUserProvider()->createModel()
->join('throttle', 'throttle.user_id', '=', 'users.id')
->join('users_groups', 'users_groups.user_id', '=', 'users.id')
->where('throttle.banned', 0)
->where('throttle.suspended', 0)
->where('users_groups.group_id', $group->id)
->orderBy('ep', 'desc')
->paginate(100, array('@rank := @rank + 1', 'users.ep', 'users.username'));
});

Но я получил эту ошибку:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '@rank := @rank + 1' in 'field list' (SQL: select `@rank := @rank + 1`, `users`.`ep`, `users`.`username` from `users` inner join `throttle` on `throttle`.`user_id` = `users`.`id` inner join `users_groups` on `users_groups`.`user_id` = `users`.`id` where `throttle`.`banned` = 0 and `throttle`.`suspended` = 0 and `users_groups`.`group_id` = 2 order by `ep` desc limit 100 offset 0)

1

Решение

array(DB::raw('@rank := @rank + 1 as A_VALID_ARRAY_KEY'), ...

Вы должны использовать псевдоним, иначе вы не сможете использовать это значение.

Кроме того, вы можете установить переменную inline, как здесь http://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector