Сортировать результаты MySQL на основе данных из другой таблицы в Кохана - PullRequest
0 голосов
/ 12 октября 2011

Я унаследовал этот проект Kohana и у меня мало опыта с ним и ORM.

Структура таблицы выглядит следующим образом:

ROLES TABLE
id
name
ROLES_USERS TABLE
role_id
user_id
USERS TABLE
id
email
password
last_login

Дело в том,Мне нужно, чтобы пользователи сортировались по тому, играют ли они определенную роль (в этом случае вход в систему), но я не знаю, как это сделать с помощью ORM.
Текущий запрос:

$users = ORM::factory('user')
    ->limit($pagination->items_per_page)
    ->offset($pagination->offset)
    ->order_by('last_login', 'DESC')
    ->find_all();

, а затем при выводе он печатается так:

$row['status'][] = ($user->has('roles', ORM::factory('role', array('name' => 'login')))
    ? '<span class="green">Active</span>'
    : '<span class="red">Blocked</span>');

Таким образом, вопрос заключается в том, как изменить запрос, чтобы иметь возможность сортировки поразрешено ли пользователям входить в систему или нет.

Ответы [ 2 ]

0 голосов
/ 14 октября 2011
$users = ORM::factory('user')
    ->join('roles_users', 'LEFT')
        ->on('roles_users.user_id', '=', 'user.id')
    ->join('roles', 'LEFT')
        ->on('roles_users.role_id', '=', DB::expr("roles.id AND roles.name = 'login'"))
    ->group_by('user.id')
    ->order_by('IFNULL("roles.id", \'2000\')', 'ASC')
    ->find_all()

Надеюсь, у вас нет 2000 ролей, но активные пользователи должны прийти первыми, используя этот запрос

0 голосов
/ 12 октября 2011

Может быть, вы могли бы просто получить пользователей на роль входа?

$login_users = ORM::factory('role', array('name'=>'login'))->users->find_all();
...