2011-10-12 72 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

相關問題