2016-09-14 2 views
0

좋은 하루 되세요!Doctrine WHERE IN WHERE IN 문

좀 CTI 엔티티 검색 교리 쿼리를 다음 있습니다 :

SELECT s.id 
FROM CRM\SpendBundle\Entity\Spend s 
WHERE (CASE 
     WHEN s INSTANCE OF 'CRM\BusinessTripBundle\Entity\BusinessTrip' THEN 'Business Trip' 
     WHEN s INSTANCE OF 'CRM\ExpenseRequestBundle\Entity\ExpenseRequest' THEN 'Expense Request' 
     ELSE '' END) IN(:availableSpends) 

매개 변수 availableSpends은 문자열의 단지 배열입니다 :

availableSpends = array('Expense Request') 

그리고이 쿼리 오류가 발생합니다 :

[Syntax Error] line 0, col 439: Error: Expected =, <, <=, <>, >, >=, !=, got 'IN' 

이 오류를 방지하려면 CASE 문으로 무엇을 할 수 있습니까? 교리 버전은 2.5.1

입니다
+0

당신이 querybuilder으로, 단지 테스트 목적을 위해, 시도 적이 있습니까? $ param ', $ em-> getClassMetadata ('My \ Entity \ Class '))'및 $ qb-> expr() -> ('u.id', array (1, 2, 3)) ' – Delphine

+0

"CASE 결과"의 별칭이 누락 되었습니까? – Delphine

+0

또는 "별명이있는"SELECT "에"CASE result "를 추가하십시오. 이 별칭에 "WHERE 필터"를 적용 해보십시오. 작동하는지 확실하지 않으면 테스트 할 수 없습니다. – Delphine

답변

0

당신은 그것을 다음과 같이 당신과 함께 작동하지 않는 경우에 문 다시 작성할 수 있습니다 :

SELECT s.id 
FROM CRM\SpendBundle\Entity\Spend s 
WHERE (s INSTANCE OF 'CRM\BusinessTripBundle\Entity\BusinessTrip' and 'Business Trip' IN (:availableSpends)) 
    or (s INSTANCE OF 'CRM\ExpenseRequestBundle\Entity\ExpenseRequest' and 'Expense Request' IN (:availableSpends))