php - Doctrine Join 的结果数据结构
问题描述
使用此查询:
$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
)
)
解决方案
从我的评论:
我认为这是没有机会的,因为第一个选择是对象本身,第二个是另外选择的 stmt。如果 user_count 是您的对象的一个属性,这将起作用。
相反,您可以添加一个名为private $countUsers
Role 实体的新属性,并使用 Doctrine LifecycleCallbacks 事件设置其值PostLoad
Symfony 实现:https ://symfony.com/doc/current/doctrine/lifecycle_callbacks.html
推荐阅读
- swift - SwiftUI:navigationBarTitle 的自定义颜色?
- elasticsearch - Agg 只对 elasitcsearch 查询中的嵌套对象计数一次
- java - 如何以 Graphics 作为参数调用 void
- javascript - 列表的javascript笛卡尔积
- python - 如何从另一个文件/模块继承一个类?
- r - 如何更改 R 中 ggplot 标题中选定文本的颜色?
- pyspark - 获取重复计数但在 pyspark 中保留重复的行
- python - 为什么不同的 URL 返回相同的页面?
- xcode - 如何手动签署 Xcode UITests 目标?
- c# - Itext7 如果表格转到下一页,则保存表格边距