我在我的项目中使用Doctrine和PostgreSQL数据库,我想让它可以翻译。问题是我想对与所选语言习惯正确相关的一些字符串进行排序。
EG。在捷克语中,字母“CH”位于aplhabet中的字母“H”之后,因此我希望在排序列表中看到“Class”,“Horn”,“Chord”;但是在英语中我想要“Chord”,“Class”,“Horn”。
在Postgres中,我可以在翻译表中创建一个部分索引,然后使用类似:
SELECT *
FROM "entity_translation"
WHERE "lang" = 1
ORDER BY "name" collate "en_US"
但是我无法(〜我不知道该怎么做)在Doctrine / DBAL中使用这种语法。
您是否在我的用例中使用类似的东西或任何其他解决方案?
答案 0 :(得分:0)
我通过为教条编写自己的自定义DQL函数来解决这个问题。如图所示Using COLLATE inside Doctrine DQL Query (Symfony2)。
此Doctrine Blog article提供有关如何注册新编写函数的详细信息。简短版本看起来像
$config = Setup::createAnnotationMetadataConfiguration($folderConfig, $devMode);
$config->addCustomStringFunction('collate', Collate::class);
$this->_entityManager = EntityManager::create($dbParams, $config);
查询可能看起来像(未经测试的代码)
$query = $queryBuilder->select('t.*')
->from(Translation::class, 't')
[...]
->orderBy('collate(t.translatedText, en_US)')
确保OS或Container安装了正确的区域设置。