Symfony2 - 如何在findBy中搜索json_array字段

时间:2014-05-26 07:09:08

标签: php json symfony doctrine-orm

假设我有一组数据联系人,

$cont = array("123-123-123","sample@sample.com");

我在symfony2教义字段中存储为json_array类型

$person->setContacts($cont); //Which automatically converts into json

现在我的问题是,在通过联系人搜索时,

$cont['contacts'] = array("123-123-123","sample@sample.com");
or
$cont['contacts'] = json_encode(array("123-123-123","sample@sample.com"));
$person->findBy($cont);

没有产生正确的结果,是否还有其他方法可以通过json_array字段检索数据,对不起,如果问题太基础了。

3 个答案:

答案 0 :(得分:4)

如果要对其进行搜索,则不应使用JSON存储在数据库中。

你要做的是基本上坚持一个值对象(你应该创建一个真正的Contact值对象而不是使用数组)。

然后你可以在这里找到几个持久化值对象的解决方案。 http://rosstuck.com/persisting-value-objects-in-doctrine/

第一个(自己绘制)与ZhukV相同,即使你保留一个数组也适用。

答案 1 :(得分:2)

如果您正在使用PostgreSQL>您可以使用json(或jsonb)数据类型。 9.3。

您可以在此处阅读文档(Datatype JSON Documentation)。

答案 2 :(得分:-3)

按JSON搜索 - SQL数据库的坏主意。您可以创建另一个字段(电话和电子邮件)。

绑定到PDO之前的所有值,在DBAL \ Types中自动转换,并且必须将实际数据设置为参数(对象,数组等)。

$cont['contacts'] = array("123-123-123","sample@sample.com");
$person->findBy($cont);

这是一个有效的代码。您可以查看分析器以查看完整的SQL查询。