为了解决您只需要主动回复的部分,有几个选项:
1)在存储库中使用一些自定义 DQL:
$dql = 'SELECT bc FROM BlogComment bc WHERE bc.replyTo = :id AND bc.active = :active';
$q = $em->createQuery($dql)
->setParameters(array('id' => $id, 'active' => true));
2)ArrayCollection::filter()
在吸气剂中使用:
public function getReplies()
{
return $this->replies
->filter(function ($reply) {
return $reply->isActive();
})
->toArray();
}
3)在getter中使用ArrayCollection::matching()
(Collection Criteria API ):
use Doctrine\Common\Collections\Criteria;
// ...
public function getReplies()
{
$criteria = new Criteria::create()
->where(Criteria::expr()->eq('active', true));
return $this->replies
->matching($criteria)
->toArray();
}
4)使用过滤器。这些可以将 where 子句添加到查询中,而不管该查询是在哪里生成的。请参阅文档。
如果您希望能够在单个查询中获取整套回复、嵌套和所有回复,则需要实现某种“嵌套集”功能的“树”。我建议您查看l3pp4rd/DoctrineExtensions的Tree行为。