Я хотел бы отобразить список записей из интернационализированной таблицы с помощью sfDoctrinePager. Не все записи были переведены на все языки, поддерживаемые приложением, поэтому мне пришлось реализовать резервный механизм для некоторых полей (переопределив функцию getFoo () в Bar.class.php, как описано в другом сообщении здесь) . У меня есть разные резервные списки для каждой культуры. Все работает нормально, пока не доходит до сортировки записей в алфавитном порядке.
Я сортирую записи на уровне SQL (Dql), добавляя -> orderBy ('t.name') к запросу:
$q = Doctrine::getTable('Foo')
->createQuery('f')
->leftJoin('f.Translation t')
->orderBy('t.name')
Но вот и неприятности: список не сортируется правильно, независимо от активной культуры. Я получаю гораздо лучшие результаты, когда ограничиваю переводы активной культурой, например:
->leftJoin('f.Translation t WITH lang = ?', $request->getParameter('sf_culture');
Тогда сортировка правильная, поскольку все переводы существуют для активной культуры. Если перевод не существует, и мне нужно взять имя из резервного языка, запись будет отображаться в самом начале списка (я понимаю, что это происходит, потому что значение для текущего языка и региональных параметров равно нулю). Мой вопрос: есть ли лучшая практика для получения интернационализированных полей (требующих резервных копий), правильно отсортированных с помощью doctrine и sfDoctrinePager? Заранее спасибо.