根据 Kohana 中另一个表的数据对 mysql 结果进行排序

发布于 2024-12-09 10:09:25 字数 990 浏览 0 评论 0 原文

我继承了这个 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>');

因此问题是如何更改查询以便能够按是否允许用户登录进行排序。

I inherited this Kohana project and have little experience with it and ORM.

Table structure is like this:

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

The thing is, I need to get users sorted by whether they have a certain role (login in this case) but have no idea how to do that with ORM.
Current query is:

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

and then when outputting it's printed like this:

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

So the question would be how to alter the query to be able to sort by whether users are allowed to login or not.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沫雨熙 2024-12-16 10:09:25
$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 个角色,但活跃用户应该首先使用此查询

$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()

I hope you don't have 2000 roles, but active users should come first using this query

愛上了 2024-12-16 10:09:25

也许您可以获取登录角色的用户?

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

Maybe you could just get the users for the login role?

$login_users = ORM::factory('role', array('name'=>'login'))->users->find_all();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文