加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

doctrine-orm – Doctrine 2:写一个合适的Subselect

发布时间:2020-12-15 02:25:46 所属栏目:Java 来源:网络整理
导读:我试图在我申请START之前获得$qb将返回的总记录数.查询$qb的LIMIT属性.我的$qb和$totalQb自己运行得很好,但是当我尝试使用$qb作为子选择时,我得到一个错误抛出: $qb = $this-entityManager-createQueryBuilder() -select('w,se') -from('DashboardEntityS
我试图在我申请START&之前获得$qb将返回的总记录数.查询$qb的LIMIT属性.我的$qb和$totalQb自己运行得很好,但是当我尝试使用$qb作为子选择时,我得到一个错误抛出:

$qb = $this->entityManager->createQueryBuilder()
        ->select('w,se')
        ->from('DashboardEntitySection','se')
        ->innerJoin('se.word','w')
        ->innerJoin('se.location','l');

    $qb->add('where',$qb->expr()->andx(
        $qb->expr()->eq('l.ignored',$ignored),$qb->expr()->eq('l.id',$params['l_id'])
    ),true);

这条线以上的一切都很好

$totalQb = $this->entityManager->createQueryBuilder()
        ->select('COUNT(x.id)')
        ->from('DashboardEntitySection','x');

上面的$totalQb本身运行良好.但是当我这样做的时候
以下,并尝试使用$qb作为$totalQb的子选择…

$dql = $qb->getDql();
$totalQb->add('where',$totalQb->expr()->exists( $dql ));
$totalSql = $totalQb->getQuery();

$sql = $totalSql->getSql();
$total = $totalSql->getSingleScalarResult();

这是错误的

它指的是SubSelect’exists’语句.但是当我自己运行$dql时
它返回预期的结果

[Syntax Error] line 0,col 69: Error: Expected DoctrineORMQueryLexer::T_FROM,got ','

在我的场景中进行子选择的正确方法是什么?

UPDATE
有人建议我添加$totalSql-> getDQL();这是该声明的输出:

SELECT COUNT(x.id) FROM DashboardEntitySection x WHERE 
EXISTS(
    SELECT w,se 
    FROM DashboardEntitySection se 
    INNER JOIN se.word w 
    INNER JOIN se.location l 
    AND (l.ignored = 0) 
    AND (l.id = 2) 
    GROUP BY w.id,l.id
)

解决方法

我能够通过更改内部 – >选择仅从一个表拉取来修复上述查询.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读