代码之家  ›  专栏  ›  技术社区  ›  Roman Newaza

条令连接结果数据结构

  •  0
  • Roman Newaza  · 技术社区  · 6 年前

    使用此查询:

    $qb = $this->createQueryBuilder('r');
    $qb->leftJoin('r.users', 'u')
        ->addSelect('count(u.id) as user_count')
        ->groupBy('r.id');
    

    我得到结果集:

    Array
    (
        [0] => Array
            (
                [0] => Array
                    (
                        [id] => 45
                        [role_name] => ROLE_ADMIN
                        [description] => Admin roles
                    )
    
                [user_count] => 1
            )
    
        [1] => Array
            (
                [0] => Array
                    (
                        [id] => 47
                        [role_name] => ROLE_OPERATOR
                        [description] => Operator role
                    )
    
                [user_count] => 1
            )
    
        [2] => Array
            (
                [0] => Array
                    (
                        [id] => 48
                        [role_name] => ROLE_TEST
                        [description] => ROLE_TEST
                    )
    
                [user_count] => 0
            )
    
    )
    

    有没有一种聪明的方法可以将所有属性转换为同一级别?现在,角色在子数组中,键为0。

    期望结果:

    Array
    (
        [0] => Array
            (
                [id] => 45
                [role_name] => ROLE_ADMIN
                [description] => Admin roles
                [user_count] => 1
            )
    
        [1] => Array
            (
                [id] => 47
                [role_name] => ROLE_OPERATOR
                [description] => Operator role
                [user_count] => 1
            )
    
        [2] => Array
            (
                [id] => 48
                [role_name] => ROLE_TEST
                [description] => ROLE_TEST
                [user_count] => 0
            )
    
    )
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Roman Newaza    6 年前

    从我的评论:

    我认为没有机会这样做,因为第一个选择是 对象的selfs,第二个是另外一个select stmt。如果 用户计数将是对象的一个属性,这将起作用。

    相反,您可以添加一个名为 private $countUsers 在你的角色实体上,通过条令生命周期回调事件设定其价值 PostLoad

    symfony实施: https://symfony.com/doc/current/doctrine/lifecycle_callbacks.html

    条令事件: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/events.html#lifecycle-events