我有两个MySQL表和相应的实体:如何创建一个Doctrine子查询?
Question
--------
id
text
level
Asked
--------
* @ORM\ManyToOne(targetEntity="QuestionEntity")
* @ORM\JoinColumn(name="question", referencedColumnName="id")
question
user
我想查询具有特定水平和问题的所有问题尚未从给定用户的询问。我如何使用实体管理器查询构建器来做到这一点? 随着MySQL的句法的查询是:
SELECT
*
FROM
Question
WHERE
Question.level = 1
AND Question.id NOT IN(SELECT Asked.question FROM Asked WHERE Asked.user = 23)
我试过许多东西像托马斯Madeyski评论,但我还是得到了500内部服务器错误。这是我的代码:(我测试的子查询,当它被孤立的感觉不错)
$em = $this->getDoctrine()->getManager();
$fbUser = $em->getRepository(FbUserEntity::class)->findOneBy(['fbId' => $session->get('fb_user_id')]);
$qb = $em->createQueryBuilder();
$qb2 = $qb;
$questions = $qb->select('q')
->from('MyBundle:QuestionEntity', 'q')
->where('q.level = :level')
->setParameter('level', $level)
->andWhere($qb->expr()->notIn(
'q.id',
$qb2->select('a.question')
->from('LMyBundle:AskedEntity', 'a')
->where('a.user = :userid')
->setParameter('userid', $fbUser->getId())
->getDQL()
))
->getQuery()
->getResult();
你会得到什么错误? –
HTTP 500错误: 糟糕!发生错误 服务器返回了“500内部服务器错误”。最糟糕的是我没有收到任何错误信息,所以我不知道发生了什么问题。 – ACs
你应该检查你的日志以了解实际上错误 –