在laravel postgres

时间:2017-12-05 16:44:15

标签: php json postgresql laravel-5 multidimensional-array

我的jsonb数据库中有多个postgres个数据字段。就像我的Contacts表有name, addresses, phones and emails作为jsonb数据字段一样。大多数jsonb数据字段都是多维的。与emails字段类似,不同的电子邮件类型具有不同的json数据。以下是我数据库中的示例电子邮件数据。

[
    {"tag": "Home", "value": "foo@bar.com"}, 
    {"tag": "Other", "value": "john@doe.net"}, 
    {"tag": "Work", "value": "john@foo.com"}, 
    {"tag": "Home", "value": "foo@gmail.com"}
]

我想对电子邮件字段的值数据执行搜索。就像我想在电子邮件领域中通过电子邮件john@doe.net获取所有联系人一样。

我尝试使用普通信息获取联系人,例如

$contacts = Contact::where('emails->value', 'ilike', "%$query%")->get();

但它没有返回任何内容,这很明显,因为电子邮件字段是多维的。 虽然在单维json数据上,此查询可以正常工作。

laravel eloquent中搜索此类数据字段的正确方法是什么?如果可以在不使用whereRaw jsonb_exists函数的情况下 ,那就更好了。

1 个答案:

答案 0 :(得分:1)

如果有人在将来需要帮助的话,我得到了它并且在这里发布了答案。

基本上我们可以使用where运算符进行简单的@>查询。并且值可以使用搜索到的电子邮件进行json编码。以下是不使用whereRaw方法搜索特定电子邮件的查询。

$contacts = Contact::where("emails", '@>', '[' . json_encode(['value' => $query]) . ']')->get();

希望将来帮助其他人:)