2017-05-10 71 views
2

我在將純SQL子句轉換爲Doctrine查詢時遇到問題。 我已經添加了條款中普通的SQL如下:QueryBuilder:如何撰寫子選擇子句

$query = $doc->getEntityManager() 
->createQueryBuilder() 
->select ('r') 
->from ('AppBundle:CFormResponse', 'r') 
->where ('r.formId = :id AND NOT (select f.private from cform f where f.FORM_ID = :id) ') 
->setParameter ('id', $formId)->getQuery(); 
$result = $query->getResult(); 

我試圖將該條款轉換爲DQL如下(到目前爲止):

$qb = $doc->getEntityManager()->createQueryBuilder(); 
$query = $qb 
    ->select ('r') 
    ->from ('AppBundle:CFormResponse', 'r') 
    ->where ($qb->expr()->andX(
      $qb->expr()->eq('r.formId', ':id'), 
      $qb->expr()->addSelect('(SELECT f.private 
       FROM AppBundle:CForm f 
       WHERE f.formId = :id)' 
      ) 
      )) 
    ->setParameter ('id', $formId)->getQuery(); 
$result = $query->getResult(); 

addSelect表明那裏我卡住。 任何人都可以指出我如何做到這一點?

回答

0

基本上,你需要添加notaddSelect

$query = $qb 
    ->select ('r') 
    ->from ('AppBundle:CFormResponse', 'r') 
    ->where ($qb->expr()->andX(
      $qb->expr()->eq('r.formId', ':id'), 
      $qb->expr()->not(
       $qb->expr() 
       ->select(`f.private`) 
       ->from('AppBundle:CForm', 'f') 
       ->where('f.formId = :id')) 
      ) 
      )) 
    ->setParameter ('id', $formId)->getQuery();