2017-01-20 6 views
2

Je tente d'implémenter un système d'authentification basé sur les rôles à l'aide d'un outil de recherche personnalisé.Cakephp 3 findAuth join table Tableau de retour

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; 
} 

La requête mysql résultant i besoin est: select users.id, nom d'utilisateur, PasswordHash, rôle, group_concat (roles.role) verrouillé des utilisateurs INNER JOIN user_roles sur user_roles.userid = users.id INNER JOIN rôles sur roles.id = groupe user_roles.role par users.id

+0

Voulez-vous dire que vous devez retourner requête uniquement? –

+0

Je dois utiliser le générateur de requête pour générer la requête MySQL que j'ai posté ci-dessus pour sélectionner 1 ligne contenant un utilisateur et plusieurs rôles: [1] [John] [$ 2 $ 10 ...] [false] ['admin,' tech ',' manager '] –

+1

vous devriez retourner l'objet de requête, n'appelez pas -> toArray() sur l'objet de requête –

Répondre

0

ce que je finalement fini par aller avec est la suivante:

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; 
} 

cela me donne un tableau multidimensionnel de: user_roles [index [id , id_utilisateur, rôles [id, rôle]]]

dans mon cas, j'ai 2 entrées pour l'indice (0 et 1) et je peux vérifier le rôle de l'utilisateur avec la fonction in_array dans une boucle foreach