我有兩個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
你應該檢查你的日誌以瞭解實際上錯誤 –