[Symfony 4] [Doctrine 2]对数组字段的查询

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

我的问题很简单,我想使用除'LIKE %xx%'之外的东西查询以学说为数组字段(PHP序列化对象)存储的数据,因为我拥有的数据是这样的:

    a:4:{i:0;i:2;i:1;i:4;i:2;i:5;i:3;i:1;}

反序列化后得到以下数组:[2,4,5,1]因此,使用'LIKE'时出现的问题是它在键和值之间造成混淆,然后是这样的:Like '%3%'将返回结果,因为3是最新值的键。

我发现在该学说或Symfony的文档中没有发现任何东西有点奇怪!

php laravel symfony doctrine
1个回答
0
投票

除非数据库本身提供支持(例如,最新的postgres + JSON),否则没有很好的方法来查询序列化的数据。

LIKE和类似方法(REGEXP)可以快速解决,并且如果您确定在该字段中不能序列化任何其他数据,但是可能不起作用,但是根据我的经验,它们不可靠:不值得麻烦。

如果是一次性工作,则将数据导入PHP,让PHP解析它们,并使用in_array

如果通常要添加此功能,则将序列化字段重构为带有外键的单独表中的时间越早,从长远来看,您将越高兴。只有在非常确定不需要查询该字段时,才应该使用doctrine的数组类型。

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