【问题标题】:Laravel 8 json colum where with array of objectLaravel 8 json 列,其中包含对象数组
【发布时间】: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


【解决方案1】:

您可以在子句中使用-> 运算符查询JSON 列:

->where('info->asin', 'DTI-LALF3-EA18')

JSON Where Clauses Docs

【讨论】:

  • 它不适用于数据是对象数组的 json 列
猜你喜欢
  • 2015-06-11
  • 2021-05-04
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
相关资源
最近更新 更多