如何在laravel的json数组列中找到字符串搜索的位置

Posted

技术标签:

【中文标题】如何在laravel的json数组列中找到字符串搜索的位置【英文标题】:how to find the position of string search in a json array column in laravel 【发布时间】: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.. 【参考方案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 .. 我想您的第二个示例应该可以完美运行,您可以删除第一个示例或首先放置第二个示例。这样比较合适 是的,你可以使用它,但如果你想在查询中这样做,你可以使用第一个选项:) 如果解决方案解决了您的问题,最好接受答案:)

以上是关于如何在laravel的json数组列中找到字符串搜索的位置的主要内容,如果未能解决你的问题,请参考以下文章