首页 > 解决方案 > 如何按 DC2Type:json_array 子字段排序

问题描述

我正在一个现有的应用程序中工作,我被要求按 Symfony 中 DC2Type:json_array 字段的子字段排序。通常我会将字段添加为表中的列。在这种情况下,这是不可能的。

我们有一个JsonSerializable invoice具有普通date属性的实体。但也是一个data包含due_date. 我想data[due_date]在 Symfony 查询中订购。这是可能吗?

标签: mysqlarrayssymfony

解决方案


tl;博士:不,不是真的。

根据Doctrine 的类型映射矩阵json_array被映射到 MySQL 的MEDIUMTEXT列类型,默认情况下显然不会其内容索引为 json,因此几乎没有性能优势。(此外,AFAICT,除了将 db json 从和转换为 php 数组/空值之外,不提供任何 json 功能)

也许你可以神奇地做一些字符串搜索魔法来提取一个值来排序,但你仍然无法获得适当索引提供的性能提升。根据您的数据,这可能会变得非常慢(并且吃掉内存)。

JSON 数据类型对于关系数据库世界来说是相当“新”的,并且像学说这样的映射器还没有完全采用它。扩展学说来处理这种数据类型可能需要做很多工作。相反,您可以重新考虑您的表架构,以将所有字段包含为您想要排序的列,以使用关系数据库提供的所有好处(如索引)。


推荐阅读