【发布时间】:2021-11-30 20:07:58
【问题描述】:
我想在列是 json 类型并且包含对象数组的表中执行查询,但前提是满足特定条件
这是我当前的代码
$initial_results = DB::table('toys')->select('id','name')->where(['name' => 'sammy', 'email' => 'whateveremail']);
if($sk ==='yes') {
$results = $initial_results->>whereRaw('JSON_CONTAINS(`info`,\'{"sku":"B07V3SSLN11"}\')')
>whereRaw('JSON_CONTAINS(`info`,\'{"asin":"DTI-LALF3-EA18"}\')')
->get();
} else {
$results = $initial_results->get();
}
但如果满足条件,我总是得到 0 结果。在数据库中,我要查询的信息确实存在。查询包含对象数组的 json 列的正确方法是什么?查看我的示例数据
[
{
"sku": "DTI-LALF3-EA18",
"adId": 244077676726655,
"asin": "B07V3SSLN11",
"cost": 0,
},
{
"sku": "DTI-LALF3-EA18",
"adId": 242968940906362,
"asin": "B07V3SSLN11",
"cost": 10,
.........
................
我什至尝试过
$initial_results = DB::table('toys')->select('id','name')->where(['name' => 'sammy', 'email' => 'whateveremail'])->->whereIn(DB::raw("JSON_EXTRACT(info, '$[*].asin')"),['B07V3SSLN11']);
提前致谢
【问题讨论】:
-
您的示例数据在冒号和引号之间有空格是否重要,但您的 SQL 没有?因为是字符串搜索,所以一定要准确,不是吗?
-
@James,如果我添加空格,结果相同
-
如果删除 { 和 } 会怎样..... JSON_CONTAINS('info',\'"sku":"B07V3SSLN11"\')
-
这是否回答了您的问题:stackoverflow.com/questions/53007520/…?
-
@Rwd。不。也许它不起作用的原因是因为我有多个 where 条件 ->whereJsonContains('info', ['asin' => 'B07V3SSLN11']) ->whereJsonContains('info', ['sku' => 'DT- LALF3-EA18'])
标签: laravel