Разбиение на страницы доктрины Symfony приносит больше данных, чем установлено на странице

Я устанавливаю 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();

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


person med    schedule 07.09.2011    source источник


Ответы (1)


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

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

DISTINCT u.id, u.username
person domi27    schedule 09.09.2011
comment
DISTINCT не работает в доктрине 1.2. лучше использовать GROUP BY. - person Flukey; 10.09.2011
comment
@domi27: GROUP BY в этом случае не годится. Я хочу разбить на страницы набор данных, возвращенный из запроса. В этом случае скажем, что есть 3 пользователя (a,b,c), и у пользователя a есть 3 разных лицензии, а у других нет ни одной. Объединение создаст 3 строки для пользователя "a" с соответствующей информацией о лицензии и еще 2 строки для пользователей "b" и "c" с нулевым значением в столбцах, связанных с лицензией. Я хочу разбить этот набор результатов на страницы. В настоящее время он разбивается на страницы таким образом, что сразу показывает все данные, связанные с пользователем «а», а затем разбивается на другие страницы один за другим. - person med; 12.09.2011