我有一个帖子表和另一个包含回复帖子的表。我在 Doctrine 中正确映射了一个(帖子)到多个(回复帖子)关系。我可以加入两者并得到我所期望的,每个回复的数组数组,但原始帖子的内容是相同的。是否可以为每个帖子返回一个数组/对象,并将回复内容放在一个数组中?
这是我现在得到的(如预期的那样):
array (size=2)
0 =>
array (size=2)
'content' => string 'Test homework post' (length=18)
'replyContent' => string 'this is a reply' (length=15)
1 =>
array (size=2)
'content' => string 'Test homework post' (length=18)
'replyContent' => string 'second reply' (length=12)
我想要这样的东西:
array (size=1)
0 =>
array (size=2)
'content' => string 'Test homework post' (length=18)
'replyContent' =>
array (size = 2)
0 => 'replyContent' => string 'this is a reply' (length=15)
1 => 'replyContent' => string 'second reply' (length=12)
我已尽最大努力进行研究,但只遇到有关返回数组而不是对象的结果。也许这是不可能的,但我认为它可能正在考虑在 php 类定义中的一对多关系映射:
$this->[name for protected variable] = new ArrayCollection();
非常感谢您的帮助!
编辑:这是我的 Doctrine 查询:
SELECT
homeworkPost.content,
homeworkPostReplies.content AS replyContent
FROM AcmeMainBundle:HomeworkPost homeworkPost
LEFT JOIN homeworkPost.homeworkPostReplies homeworkPostReplies
WHERE homeworkPost.course = :course
最佳答案
我遇到了同样的问题并找到了解决方案,所以我把这个作为引用: 我正在使用的一段代码
$query = $this->em->createQueryBuilder();
$query->select("partial venue.{id,name,description,state,city,street,postalCode,lon,lat},partial r.{id}")
->from("CoreBundle:ServiceProvider","venue")
->join("venue.reviews","r","with","IDENTITY(r.serviceProvider) = venue.id")
->andWhere("venue.city = :city_name")
->andWhere("IDENTITY(venue.venueStatus) != 1")
->andWhere("IDENTITY(venue.venueStatus) != 3")
->setParameter("city_name",$cityName)
->orderBy("venue.points" ,"DESC")
->addOrderBy("venue.name" ,"ASC");
使用部分将解决这个问题 引用 14. Doctrine Query Language — Doctrine 2 ORM 2 documentation - 14.2.4.1. Partial Object Syntax
关于symfony - 将一对多连接结果作为对象中的数组返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15623446/