【发布时间】:2018-05-19 09:45:00
【问题描述】:
我的postgres 数据库中有多个jsonb 数据字段。就像我的 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 获取所有联系人。
我已经尝试用普通的 where 查询来获取联系人
$contacts = Contact::where('emails->value', 'ilike', "%$query%")->get();
但它不会返回任何内容,这很明显,因为电子邮件字段是多维的。 尽管在单维 json 数据上,此查询工作正常。
在laravel eloquent 中搜索此类数据字段的正确方法是什么?如果可以不使用whereRaw 和jsonb_exists 函数,那就更好了。
【问题讨论】:
标签: php json postgresql laravel-5 multidimensional-array