我的问题很简单,我想使用除'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的文档中没有发现任何东西有点奇怪!
除非数据库本身提供支持(例如,最新的postgres + JSON),否则没有很好的方法来查询序列化的数据。
LIKE
和类似方法(REGEXP
)可以快速解决,并且如果您确定在该字段中不能序列化任何其他数据,但是可能不起作用,但是根据我的经验,它们不可靠:不值得麻烦。
如果是一次性工作,则将数据导入PHP,让PHP解析它们,并使用in_array
。
如果通常要添加此功能,则将序列化字段重构为带有外键的单独表中的时间越早,从长远来看,您将越高兴。只有在非常确定不需要查询该字段时,才应该使用doctrine的数组类型。