如何在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数组列中找到字符串搜索的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中搜索具有数组属性的对象数组

Laravel Eloquent 在 JSON 列中查找日期在某个范围内的所有记录

如何查询数据库以查找包含来自多选 (Laravel) 的 json 数据的列中的元素

在laravel中的json数组中查找

从 SQL (Laravel) 检索 JSON 格式数组时遇到问题

如何使用 Laravel Eloquent 在数据库中保存 JSON 响应,我收到错误“数组到字符串转换”