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

php – Symfony2来自查询的错误响应,包含maxresults和firstresul

发布时间:2020-12-13 22:54:32 所属栏目:PHP教程 来源:网络整理
导读:我遇到了setMaxResult和setFirstResult的严重问题. 当我试图获得没有setMaxResults和setFirstResult的结果时,它工作正常,返回所有行. 当我使用offset = 0和limit = 10时,它运行良好,返回10行. 当我使用offset = 10和limit = 10时,它返回5行(必须是7行) 另一
我遇到了setMaxResult和setFirstResult的严重问题.

当我试图获得没有setMaxResults和setFirstResult的结果时,它工作正常,返回所有行.

当我使用offset = 0和limit = 10时,它运行良好,返回10行.

当我使用offset = 10和limit = 10时,它返回5行(必须是7行)

另一个例子,我使用了offset = 0,limit = 20,它返回了15行.但它必须是17行.

使用offset = 0和limit = 30,它返回所有17行….为什么这个查询工作得那么糟糕?对于offset = 0和limit 20,它应该返回所有17行…但不是15 ..

代码:

$eligibleCircles = $this->getAllCircles($user);
$results = $this->getEntityManager()
    ->createQuery(
        'SELECT
            e
        FROM
            TestBundle:Event e
        LEFT JOIN
            e.eligibleCircles eligibleCircles
        WHERE
            (
                eligibleCircles in (:eligibleCircles)
                OR
                e.owner = :user
            )
                AND
                e.eventStatus = :eventStatus
                AND
                NOT EXISTS (
                    SELECT
                    eh
                    FROM
                    TestBundle:EventHidden eh
                    WHERE
                        eh.user = :user
                        AND
                        eh.event = e
                    )
        AND
            e.startDate < :currentDate
        ORDER BY e.startDate DESC
        '
    )
    ->setParameter('eventStatus',3)
    ->setParameter('eligibleCircles',$eligibleCircles )
    ->setParameter('user',$user )
    ->setParameter('currentDate',new DateTime('now') )
    ->setFirstResult($offset)
    ->setMaxResults($limitNr)
    ->getResult();

解决方法

对于在查询中加入连接时sql-limit无效,Cerad是正确的.

如果您想在使用Doctrine2时进行分页,可以使用一些有用的工具.

看看这里的文档:
http://doctrine-orm.readthedocs.org/en/latest/tutorials/pagination.html

您需要一些额外的代码,但大多数复杂的东西都是为您处理的.它还需要1或2个额外查询才能找到正确的记录数据.在您的情况下,这可能是也可能不是问题.

(编辑:李大同)

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

    推荐文章
      热点阅读