Пагинация доктрины Symfony приносит больше данных, чем указано на странице - PullRequest
1 голос
/ 07 сентября 2011

Я устанавливаю 1 строку на страницу в пейджере Symfony, но на нем отображается больше данных, чем 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();

Пагинация есть, но проблема в том, что на одной странице отображаются несколько строк, когда в таблице лицензий для определенного пользователя есть несколько строк. Как я могу правильно это реализовать?

1 Ответ

0 голосов
/ 10 сентября 2011

Чего вы хотите достичь, соединяя таблицу пользователей и лицензий (отношение 1: n) при переходе по страницам (sfGuard) пользователей?

Если вы хотите отсортировать пользователей по типу лицензии / дате / количеству, вы можете использовать

DISTINCT u.id, u.username
...