Результат Структура данных Doctrine Join - PullRequest
0 голосов
/ 20 ноября 2018

Используя этот запрос:

$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 Ответ

0 голосов
/ 20 ноября 2018

Из моего комментария:

Я думаю, что у этого нет шансов, потому что первый выбор - это сам объект, а второй - дополнительно выбранный stmt.Если бы user_count был атрибутом вашего объекта, это бы сработало.

Вместо этого вы можете добавить новый атрибут с именем private $countUsers в вашу сущность Role и установить его значение с помощью события Doctrine LifecycleCallbacks 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-СОБЫТИЯ

...