2017-01-20 88 views
2

我正在嘗試使用自定義查找器實現基於角色的身份驗證系統。CakePHP 3 findAuth連接表返回數組

public function findAuth(\Cake\ORM\Query $query, array $options) 
{ 
    $query 
    ->select(['id', 'username', 'passwordHash', 'locked', 'roles.role']) 
    ->group('username') 
    ->join([ 
     'table' => 'user_roles', 
     'conditions' => ['user_roles.userid = Users.id']]) 
    ->join([ 
     'table' => 'roles', 
     'conditions' => ['roles.id = user_roles.role']]) 
     ->toArray() 
     ; 
    return $query; 
} 

得到的MySQL查詢我需要的是: 選擇users.id,用戶名,passwordHash,鎖定,GROUP_CONCAT(roles.role)來自用戶的角色INNER JOIN上user_roles.userid = users.id user_roles INNER JOIN角色在roles.id = user_roles.role通過users.id

+0

你的意思,你只需要返回查詢中與in_array功能檢查用戶的角色? –

+0

我需要使用查詢生成器來生成我上面發佈的MySQL查詢,以選擇包含用戶和多個角色的1行: [1] [John] [$ 2 $ 10 ...] [false] ['admin,' tech','manager'] –

+1

你應該返回查詢對象,不要在查詢對象上調用 - > toArray() –

回答

0

我終於結束了持續組是這樣的:

public function findAuth(\Cake\ORM\Query $query, array $options) 
{ 
    $query 
    ->select(['id', 'username', 'passwordHash', 'locked']) 
    ->join([ 
     'table' => 'user_roles', 
     'conditions' => ['user_roles.user_id = Users.id']]) 
    ->contain(['UserRoles.Roles']) 
    ->join([ 
     'table' => 'roles', 
     'conditions' => ['roles.id = user_roles.role']])    
    ->group(['Users.username']); 
    return $query; 
} 

這給我的多維數組: user_roles [指數[ID ,user_id,roles [id,role]]]

在我來說,我有索引條目2(0和1),我可以一個foreach循環