我正在尝试使用laravel的json contains方法搜索数据库。这是我的一个数据库行的JSON:
{
"row": {
"1": {
"ID":"110555175667"
},
"2": {
"ID":"11023235667"
},
"3": {
"ID":"11001414141667"
},
"4": {
"ID":"11023235667"
},
"5": {
"ID":"1100012222225667"
},
}
}
我想搜索ID,但是正如您看到的那样,有一些数字作为属性。
例如,我要查找11023235667
。我已经尝试过了:
->whereJsonContains('json', [['row' => ['1' => ['ID' => '11023235667']]]])
但这没有用。我该怎么做?
编辑:
我也尝试过这个:
->whereRaw('JSON_CONTAINS(json, "$.row.*.ID", "11023235667")')
我知道的属性row
必须是JSON数组才能完成以匹配ID,但已将其设置为JSON对象
JSON_CONTAINS()的用法接受JSON文档作为其第二个参数,而不是路径。
您可以使用该路径将ID提取到数组中:
SELECT JSON_EXTRACT(json, '$.row.*.ID') FROM ...
+--------------------------------------------------------------------------------------+
| ["110555175667", "11023235667", "11001414141667", "11023235667", "1100012222225667"] |
+--------------------------------------------------------------------------------------+
使用此方法,您可以搜索结果数组:
SELECT ... FROM mytable
WHERE JSON_SEARCH(JSON_EXTRACT(json, '$.row.*.ID'), 'one', '11023235667') IS NOT NULL;
您需要whereRaw()
在Laravel中使用此功能,因为Laravel没有针对此表达式的内置查询生成器功能。
提示:在WHERE
SQL查询子句中引用JSON列后,查询将变得更难编写和优化。这应该是一个红色标记,指示您的设计错误。您最好将数据存储在普通的行和列中,而不是JSON中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句