如何解决我可以在我的学说结果中直接获得嵌套列表吗?
对不起,如果问题措辞不好,我无法提供描述问题的好方法。
因此,基本上,我使用的是“ Doctrine查询”构建器来尝试和来自Session
实体的培训课程列表。对于每个session
,我都需要获取诸如名称和日期之类的基本属性,但是我还需要获取participants
的列表。实体Session
和Participant
之间存在一对多关系,因为给定的participants
可能有多个session
。我只需要这些participants
的列表,嵌套在sessions
列表的每个项目中。像这样:
[
{
"session_name": "name1","session_date": "date1",...
"participants": [
{
"participant_name": "john1",...
},{
"participant_name": "john2",...
],},{
"session_name": "name2","session_date": "date2",...
"participants": [
{
"participant_name": "john3",{
"participant_name": "john4",...
]
在我看来,这似乎应该是非常基本的,但是对于我的生命,我无法使其与JOIN
,子查询等一起使用。我得到的最接近的是该错误,这确实意味着我正在尝试获取嵌套数组(但不允许我这样做):
SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row
我在运行此代码时遇到此错误:
$query = $this->createQueryBuilder('s')
->select('
s.name,s.date,(SELECT p.nom FROM '.Participant::class.' p WHERE p.session = s.id) participants
')
->getQuery()->getArrayResult();
我知道我可以获取我的sessions
,然后遍历他们并使用另一个DQL查询来获取他们的参与者,但是显然,这似乎不是正确的方法。有更好的方法吗?
解决方法
您可以直接在leftJoin
上执行QueryBuilder
:
$queryResult = $this->createQueryBuilder('s')
// After that next line,you can reference participants as 'p'
->leftJoin('s.participants','p')
// If you intend to loop on the result,to avoid the N+1 problem,add this line :
->addSelect('p')
->getQuery()
->getResult()
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。