2

我正在尝试使用自定义查找器来实现基于角色的身份验证系统。

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 查询是: select users.id, username, passwordHash, locked, group_concat(roles.role) role from users INNER JOIN user_roles on user_roles.userid = users.id INNER JOIN roles on roles.id = user_roles.role按 users.id 分组

4

1 回答 1

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[index[id, user_id, roles[id, role]]]

在我的情况下,我有 2 个索引条目(0 和 1),我可以在 foreach 循环中使用 in_array 函数检查用户的角色

于 2017-01-21T15:00:38.740 回答