Cakephp 3 findAuth 加入 table return 数组

Cakephp 3 findAuth join table return array

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

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,用户名,passwordHash,已锁定,group_concat(roles.role)来自用户的角色 INNER JOIN user_roles on user_roles.userid = users.id roles.id = user_roles.role 上的 INNER JOIN 角色按 users.id

分组

我最终得出的结论是:

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

这给了我一个 multi-dimensional 数组: user_roles[索引[id, user_id, 角色[id, 角色]]]

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