如何在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 Eloquent 在 JSON 列中查找日期在某个范围内的所有记录
如何查询数据库以查找包含来自多选 (Laravel) 的 json 数据的列中的元素