我需要获取按字母顺序排序的国家/地区列表。由于我已将实体翻译成四种语言(英语、法语、西班牙语和中文),因此我使用了 gedmo 学说扩展来管理翻译。问题是当我在实体表单字段类型中获取此列表时:
$form = $builder->add('country', 'entity',
array('class' => 'GroupCommonBundle:Country',
'query_builder' => function(EntityRepository $er) {
$query = $er->createQueryBuilder('c')->orderBy('c.name');
}
结果被排序为原始实体定义(英语)而不是当前语言环境(西班牙语或法语),我真正需要的是什么。其实我用$this->container->getParameter('locale')
我试图在查询中强制使用挂钩,如此处所述:
$query->getQuery()->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE, $this->container->getParameter('locale'));
但是 AFAIK,这仅在查询编写为 dql 时才有效:
$query = $this->getDoctrine()->getManager()->createQuery('
SELECT c
FROM GroupCommonBundle:Country c
ORDER BY c.name ASC');
$query->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE, $this->container->getParameter('locale'));
提交的实体表单不允许这样做,因为它正在等待一个queryBuilder 对象。
所以,我需要将我的收藏翻译成他当前的语言并以表格形式进行分类。任何人都知道如何实现这一目标?