我在项目中使用学说和PostgreSQL数据库,我想使其可翻译。问题是我想对一些与所选语言习俗有关的字符串正确分类。
例如。用捷克语语言,在Aplhabet中的字母" H"之后有字母" CH",因此我想在排序列表中看到" class"," horn"," horn","和弦";但是用英语我想获得"和弦"," class"," horn"。
在Postgres中,我可以在翻译表中创建部分索引,然后使用以下内容:
SELECT *
FROM "entity_translation"
WHERE "lang" = 1
ORDER BY "name" collate "en_US"
但是我无法(〜我不知道该怎么做)在学说/dbal中使用此语法。
您是否为我的用例使用类似的解决方案?
我通过为学说编写自己的自定义DQL函数来解决此问题。如下所示,使用教义内部DQL查询(SYMFONY2)中所示。
本学说的博客文章提供了有关如何注册新书面功能的详细信息。简短版本看起来像
$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或容器安装了正确的位置。