【问题标题】:QueryBuilder : how to compose subselect clauseQueryBuilder:如何编写子选择子句
【发布时间】:2017-05-10 12:46:17
【问题描述】:

我在将普通 SQL 子句转换为 Doctrine 查询时遇到问题。 我在下面的纯 SQL 中添加了该子句:

$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 表示我卡在哪里。 谁能指出我如何做到这一点的方向?

【问题讨论】:

    标签: doctrine-query


    【解决方案1】:

    基本上,您需要将not 添加到您的addSelect

    $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 ();
    

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 2013-02-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多