Doctrine orm 如何规避错误的原则和规则

Doctrine orm 如何规避错误的原则和规则,doctrine-orm,orm,pagination,symfony-2.8,Doctrine Orm,Orm,Pagination,Symfony 2.8,我正在使用symfony 2.8.39和Doctrine 2.4.8,在分页结果方面存在问题。底层是Mysql5.7服务器 关于传呼的文件说: 分页原则查询并不像您在 开始如果您有一对多的复杂获取连接场景 或使用“默认”限制功能的多对多关联 数据库供应商的数量不足以获得正确的结果 这正是我的处境。我在SQL translation中的语句如下所示: SELECT sc.id, sc.name, scc.prio, sd.description FROM sang_contents sc JOI

我正在使用symfony 2.8.39和Doctrine 2.4.8,在分页结果方面存在问题。底层是Mysql5.7服务器

关于传呼的文件说:

分页原则查询并不像您在 开始如果您有一对多的复杂获取连接场景 或使用“默认”限制功能的多对多关联 数据库供应商的数量不足以获得正确的结果

这正是我的处境。我在SQL translation中的语句如下所示:

SELECT sc.id, sc.name, scc.prio, sd.description
FROM sang_contents sc
JOIN sang_categories_contents scc
JOIN sang_descriptions sd
JOIN sang_languages sl
WHERE
    sc.id = scc.content_id AND 
    scc.category_id = 20 AND
    scc.is_enabled = 1 AND
    sc.id = sd.content_id AND
    sd.language_id = sl.id AND
    sd.description != "" AND
    sl.name = "DE"
ORDER BY scc.prio ASC, sc.id DESC
由于ORM是3.0版,而且这个问题从一开始就存在,我认为ORM不会在任何时候修复它。 那么,如何实现分页的正确结果呢

到目前为止,我解决这个问题的想法是对简化的数据进行分页,分页应该能够正确处理:

  • 创建一个包含所有类别和语言的结果的表,并使用额外的实体访问该表。 缺点是,每次在for connected表中进行更改时,我都必须更新此表
你能为这个问题提出另一个解决方案吗

我想第三方软件 或 只是停留在ORM分页的顶部,无法解决根本问题

对吗

这是我目前的代码:

    $page = max(0, $request->query->getInt('page', 0));
    $pageRequest = new PageRequest($itemsPerPage, $page);

    $query = $this->em->createQuery(
        'SELECT sc, sd
          FROM NamiApiCoreBundle:Content sc
          JOIN sc.categoryContents scc
          JOIN sc.descriptions sd
          JOIN sd.language sl
            WHERE
            sc.id = scc.content AND
            scc.category = :id AND
            scc.enabled = 1 AND
            sc.id = sd.content AND
            sd.language = sl.id AND
            sd.description != \'\' AND
            sl.iso = :lang
            ORDER BY scc.priority ASC, sc.id DESC'
    )
        ->setFirstResult($pageRequest->getOffset())
        ->setParameter('lang', $lang)
        ->setParameter('id', $categoryId)
        ->useResultCache(true, $this->cache_lifetime);


    if ($itemsPerPage > 0) {
        $query->setMaxResults($pageRequest->getSize());
    }

    $paginator = new Paginator($query);

您是否尝试了问题中第一个链接中描述的默认原则分页器?报价不是针对这个分页器的,而是使用没有任何分页器的查询生成器的setFirstResults和setMaxResults。啊,你认为如果我手动拆分结果,应该可以吗?那么,分页器又有什么用呢?是的,我用这种方法。我在问题描述中添加了原始查询的代码。分页器的代码看起来不错。我认为这些条件“sc.id=scc.content”、“sc.id=sd.content”和“sd.language=sl.id”是不需要的。为什么您认为它们没有必要?它们是连接条件,学说将通过这些关系来构造这些条件。获取由geQuery()生成的sql->getSql(),您应该会看到