Symfony Doctrine:orderBy JSONb 字段?

问题描述 投票:0回答:1

有没有办法通过学说中特定的jsonb字段进行排序?

表格示例:

id 人员数据 工资
1
{'name': 'John Smith', 'number': 13}
10000
2
{'name': 'John Doe', 'number': 192}
11000
2
{'name': 'Don John', 'number': 87}
12000

如何通过

person_data->>'name'
订购?

PostgreSQL 风格的代码不起作用。

->addOrderBy("person_data->>'name'")

抛出错误:

Error: Expected Literal, got '>'

symfony doctrine sql-order-by jsonb dql
1个回答
0
投票

我现在找到了解决这个问题的方法。存在一个第三方库,它为 Doctrine 提供了一组来自 PostgreSQL 的 JSON 函数。 JsonGet 也是 PostgreSQL 支持的 JSON 函数之一。

要使事情正常工作,请先安装库

composer require scienta/doctrine-json-functions

通过为实体管理器配置此 Doctrine DQL 功能:


orm:
    entity_managers:
        default:
            dql:
                string_functions:
                    JSON_GET: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Postgresql\JsonGet

可以使用 Doctrine QueryBuilder 编写以下 `orderBy`` 语句:


$qb = $this->em->createQueryBuilder();
// ...
$qb->orderBy("JSON_GET(YourAlias.YourField, 'PropertyOfTheJson')");

对于 PostgreSQL,QueryBuilder 将此语句翻译如下:


SELECT * FROM yourtable ORDER BY yourfield->'PropertyOfTheJson'

这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.