【问题标题】:Search for array value inside JSON column在 JSON 列中搜索数组值
【发布时间】:2021-11-12 11:02:30
【问题描述】:

当只有一个值时,whereJsonContains 完成这项工作。但在这种情况下,我有一个数组,它是由于保存到 JSON 列而被转换为字符串的结果。示例如下:

[
   {
      "key":"cUyV6kW3noxxW85G",
      "value":"value-1",
   },
   {
      "key":"R8dHf4vWBS8M4W5G",
      "value":"value-2",
      "multidimensional_array":{
         "table":[
            {
               "attributes":{
                  "array":"[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\"]"
               }
            }
         ],
      }
   },
   {
      "key":"cUyV6kW3noxxW85G",
      "value":"value-3",
   },
]

我想获取那些在数组中包含特定值的元素。这是我的尝试,但它不起作用,没有返回任何结果:

ExampleTable::whereJsonContains('example_column', ['multidimensional_array' => ['table' => ['attributes' => ['array' => $specific_value]]]])->get();

是否可以这样做,或者我是否需要获得具有 multidimensional_arrayjson_decode() array 的每个结果,以便我可以遍历它以查找我需要的内容?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    查看文档:https://laravel.com/docs/master/queries#json-where-clauses

    你应该使用whereJsonContains有点不同;

    ExampleTable::whereJsonContains('multidimensional_array->table->attributes->array', $specific_value)->get();
    

    【讨论】:

    • 感谢您的回答。实际上你可以同时使用它,但我认为这不是导致这个问题的原因。问题是array 被表示为一个字符串,而不是将$specified_valuearray 元素进行比较,整个array 被视为单个元素,因此false 总是被返回
    • 啊,我明白了,嗯,我认为这将是困难的.. 你应该将原始数组转换为 json 并将其存储在数据库中,这将更容易获取,搜索但也再次转换回数组。这可能吗(即使这个解决方案也不是你想要的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多