2017-05-10 36 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();