2011-10-12 89 views
0

我继承了Kohana项目,对它和ORM几乎没有经验。根据Kohana中的另一个表的数据对mysql结果进行排序

表结构是这样的:

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>'); 

所以现在的问题是如何改变查询能够通过对用户进行排序是否被允许是否登录。

回答

0
$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

This works thank you!只有一个封闭的支架缺少关闭“on”后第二次加入,但它完美的作品。 – praxus

+0

伟大。我修改了代码来修复丢失的括号。 – Zahymaka

0

也许你可以让用户登录角色?

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

。但我需要所有的用户只是为了能够根据他们是否具有登录角色来对输出进行排序。但是,也许你正在寻找一些东西......如果有可能加入没有这个角色的用户,那也许也能起作用。 – praxus

+0

但是你有alrady在你的问题$ user-> has('roles',ORM :: factory('role',array('name'=>'login')) – matino

+0

是真的,但是过滤了结果而不是排序他们正如我所说,我对Kohana和ORM的理解是有限的,无论如何,感谢您的帮助。 – praxus

相关问题