【问题标题】:symfony doctrine pagination brings more data than set per pagesymfony 学说分页带来的数据多于每页设置的数据
【发布时间】:2023-04-06 06:11:01
【问题描述】:

我在 symfony 寻呼机中每页设置 1 行,但它显示的数据多于 1。这是因为我的查询将 sfGuardUser 表与其他表连接在一起,并且在某些情况下会导致 'sfGuardUser' 行重复是该特定用户的“许可证”表中的多个条目!这是我的查询:

    $pager = new sfDoctrinePager('sfGuardUser', '1');

     $q = Doctrine_Query::create()
                        ->select('u.id, u.username, g.name, l.id, l.status,             l.client_id, l.vendor_id, l.applied_date, p.org_name')
                        ->from('sfGuardUser u')
                        ->leftJoin('u.Profile p')
                        ->leftJoin('u.Groups g')
                        ->leftJoin('u.LicensedClients l')
                        ->where('g.name = \'vendor\'')
                        ->orderBy('l.applied_date');

     $q->setHydrationMode(Doctrine_Core::HYDRATE_SCALAR);

     $pager->setQuery($q);
     $pager->setPage($request->getParameter('page', 1));
     $pager->init();

存在分页,但问题是在某些情况下,当许可证表中有特定用户的多行时,一页中会显示多行。我怎样才能以正确的方式实现它?

【问题讨论】:

    标签: php symfony1 doctrine symfony-1.4 doctrine-1.2


    【解决方案1】:

    通过 (sfGuard)Users 分页时,您希望通过加入用户和许可证表(1:n 关系)来实现什么?

    如果您想按许可证​​类型/日期/计数对用户进行排序,您可以使用

    DISTINCT u.id, u.username
    

    【讨论】:

    • DISTINCT 在学说 1.2 中不起作用。最好使用 GROUP BY。
    • @domi27: 在这种情况下 GROUP BY 不行。我想对查询返回的数据集进行分页。在这种情况下,假设有 3 个用户(a、b、c),用户 a 有 3 个不同的许可证,而其他人没有。加入将为用户“a”生成 3 行具有相应的许可证信息,并为用户“b”和“c”生成 2 行,在许可证相关列中具有空值。我想对这个结果集进行分页。目前它进行分页,以便一次显示所有与用户“a”相关的数据,然后一个接一个地分页..
    猜你喜欢
    • 2016-03-31
    • 2011-03-17
    • 1970-01-01
    • 2017-12-03
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多