【问题标题】:How to use PostgreSQL COLLATE modifier in Doctrine如何在 Doctrine 中使用 PostgreSQL COLLATE 修饰符
【发布时间】:2017-08-30 09:13:33
【问题描述】:

我在我的项目中使用 Doctrine 和 PostgreSQL 数据库,我想让它可以翻译。问题是我想对一些与所选语言习惯相关的字符串进行正确排序。

例如。在捷克语中,字母“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 中使用这种语法。

请您为我的用例使用类似的解决方案或任何其他解决方案吗?

【问题讨论】:

    标签: php postgresql doctrine-orm doctrine-query doctrine-extensions


    【解决方案1】:

    我通过为教义编写自己的自定义 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)')
    

    确保操作系统或容器安装了正确的语言环境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 2014-05-13
      • 2021-04-16
      • 1970-01-01
      • 2020-04-27
      • 2022-06-16
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多