我有一个User
,一个Question
和一个Answer
实体。
User
都有n Answers
。Answer
都有
aid
。question
字段,其中包含Question
已回答的ID。answer
。Question
都有一个唯一的qid
。我想根据他们对特定问题的回答选择所有Users
。那是我走了多远:
$qid = 123; // The id of the question to order the users by.
$orderByDir = 'ASC';
$qb->select('u')
->from('EventManager_Entity_User', 'u')
->leftJoin('u.answers', 'a', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.question = ' . $qid)
->orderBy('a.answer', $orderByDir);
$users = $qb->getQuery()->execute();
但结果没有订购:/
答案 0 :(得分:1)
我想问你为什么不提及你的YAML中的关系或你描述列的任何其他方式?你的表,User-Answers得到1对多的关系和问答 - 得到1对多的关系。如果您使用YAML,注释等提及关系,则无需在哪个列上提及左连接。我认为在订购时会引起问题。因为你没有特别提到这种关系。如果您已正确提及关系(尝试运行php app / console doctrine:schema:valudate),您可以将查询改为此,
$qb->select('u')
->from('EventManager_Entity_User', 'u')
->leftJoin('u.answers','a')
->leftJoin('a.question','q')
->orderBy('a.answer', $orderByDir);
然后选择特定问题,在你的情况下,$ qid,你可以这样做,
$qb->select('u')
->from('EventManager_Entity_User', 'u')
->leftJoin('u.answers','a')
->leftJoin('a.question','q')
->where('q.id = :id')
->setParameter('id',$qid)
->orderBy('a.answer', $orderByDir);
如果你正确地提到你的关系并像这样写你的DQL,我相信你会得到正确的结果。希望这会有所帮助。
干杯!
答案 1 :(得分:0)
我不能肯定这是正确的,但你的查询看起来不太正确。 特别是你加入Answers给用户的方式。对我而言,即使可能存在于您的架构中,它们之间似乎没有外键关系。
试试这个,它可能对您的架构不正确,但您应该能够理解正在发生的事情。假设连接是问题,那么排序应该有效。
use Doctrine\Common\Collections\Criteria;
$qb
->select('u')
->from('EventManager_Entity_User', 'u')
->join('u.answers', 'a')
->join('a.question', 'q')
->where('q.id = :question_id')
->setParameter('question_id', $qid)
->orderBy('a.answer', Criteria::ASC)
;
我将其更改为内部联接,没有它,一些没有链接到答案的用户可能会像其他人一样订购。