有没有办法通过学说中特定的jsonb字段进行排序?
表格示例:
id | 人员数据 | 工资 |
---|---|---|
1 |
|
10000 |
2 |
|
11000 |
2 |
|
12000 |
如何通过
person_data->>'name'
订购?
PostgreSQL 风格的代码不起作用。
->addOrderBy("person_data->>'name'")
抛出错误:
Error: Expected Literal, got '>'
我现在找到了解决这个问题的方法。存在一个第三方库,它为 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'
这对我有用