【问题标题】:how to find the position of string search in a json array column in laravel如何在laravel的json数组列中找到字符串搜索的位置
【发布时间】:2020-11-16 15:51:36
【问题描述】:

我有一个查询,它从 json 数组列返回关于我正在搜索的字符串是否存在的布尔值

列是这样的 ------ ["a","b","c"] 查询如下

DB::table('product_lines as l')->where('l.id',$position->product_line_id)
 ->whereRaw('json_contains(l.types, \'["b"]\')')->first()->count();

但我想获取找到字符串的位置...让我们说它应该返回 1。

请帮忙。

【问题讨论】:

  • 你没有得到满足条件的行数吗?问题是为满足条件的每一行获取该字符串的位置?
  • 不是每个 raw...想象一下我首先使用它,它在我需要搜索位置的情况下返回一个 raw..

标签: sql json laravel


【解决方案1】:
$pl = DB::table('product_lines as pl')
                     ->select(DB::raw('JSON_SEARCH(pl.types, "one", "b") as 
                           idx'))
                     ->where('id', $position->product_line_id)
                     ->whereRaw('JSON_CONTAINS(pl.types, \'"b"\', \'$\')')
                     ->first();
dd($pl->idx);

它将为您提供输出,因为"$[1]" "" 是输出字符串的一部分。那么你 需要获取[]之间的数字来获取数组中item的索引。

$pl = DB::table('product_lines as pl')
                     ->where('id', $position->product_line_id)
                     ->whereRaw('JSON_CONTAINS(pl.types, \'"b"\', \'$\')')
                     ->first();

$arr = json_decode($pl->types);

dd(array_search("b", $arr));

【讨论】:

  • 所以这个“array_search”函数是我忘记的并且一直试图记住函数的名称。这是完美的工作......无论如何。谢谢 Aashish .. 我想您的第二个示例应该可以完美运行,您可以删除第一个示例或首先放置第二个示例。这样比较合适
  • 是的,你可以使用它,但如果你想在查询中这样做,你可以使用第一个选项:)
  • 如果解决方案解决了您的问题,最好接受答案:)
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 2019-07-23
  • 2023-03-24
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多