我正在尝试创建一个查询来获取每个用户,并且,对于那些已收到反馈的人,也会获取他们的评分平均值。
经过一些研究,我制作了一个查询,它将返回收到反馈的所有用户及其各自的评分。这是一个开始。但是,当我添加->leftJoin('AppFeedbackBundle:Feedback', 'f', 'WITH', 'u.id = f.user')
$qb = $this->createQueryBuilder('u')
->select(array( 'u', 'AVG(r.ratings)' ))
->orderBy('u.lastLogin', 'DESC')
->setMaxResults($limit)
->leftJoin('AppFeedbackBundle:Feedback', 'f', 'WITH', 'u.id = f.user')
->join('f.rating', 'r')
->groupBy('u.id');
你知道如何让有和没有反馈的用户同意,并将所述反馈与那些拥有反馈的用户联系起来吗?
我想避免在用户实体中反转ManyToOne关系(反馈< - >用户),因为我倾向于一直提取用户,我觉得我最终会得到很多反馈,因此我不喜欢出于性能原因,我希望每次获得用户都有这些用户(请告诉我,如果你不认为这个性能参数是相关的,或者你认为这并不重要)。
反馈,用户和评级之间的链接都在反馈实体中,如下所示:
/**
* @ORM\ManyToOne(targetEntity="App\UserBundle\Entity\User", cascade={"persist", "remove"})
*/
private $user;
/**
* @ORM\OneToOne(targetEntity="App\FeedbackBundle\Entity\Rating", cascade={"persist", "remove"})
* @Assert\Valid()
*/
private $rating;
答案 0 :(得分:2)
左连接评级也是因为所有有反馈意见的用户都有评分但没有反馈的用户。