如何在 laravel 中查询 json 列的位置?

Posted

技术标签:

【中文标题】如何在 laravel 中查询 json 列的位置?【英文标题】:How can I make query where json column in the laravel? 【发布时间】:2018-08-30 16:48:32 【问题描述】:

我使用 laravel 5.6

我有一个领域。字段的数据类型是json

字段(desc字段)的值是这样的:

[
"code": "1", "club": "CHE", "country": "ENGLAND", 
"code": "2", "club": "BAY", "country": "GERMANY", 
"code": "3", "club": "JUV", "country": "ITALY", 
"code": "4", "club": "RMA", "country": "SPAIN", 
"code": "5", "club": "CHE", "country": "ENGLAND", 
"code": "6", "club": "BAY", "country": "GERMANY", 
"code": "7", "club": "JUV", "country": "ITALY", 
"code": "8", "club": "RMA", "country": "SPAIN", 
"code": "CODE", "club": "CLUB", "country": "COUNTRY"
]

我想检查俱乐部的钥匙是否有值“CHE”

我尝试这样:

->where('desc->club','=', 'CHE')->get();

但它不起作用

我该如何解决这个问题?

【问题讨论】:

你也想接电话吗?例如:你想返回这个:"code": "5", "club": "CHE", "country": "ENGLAND",还是只返回整行? 【参考方案1】:

只需使用 SQL LIKE 运算符

->where('desc', 'like', '%"club": "CHE"%');

【讨论】:

你能用 json 更新你的答案吗?所以有两种解决方案。首先,使用like。二、使用json(mattstauffer.com/blog/…) 这样搜索号码不好。如果我们检查“1”,它可以找到“11”或“21”并且... @AbdulAhmadMatin 是的,你是对的。但我发现了一些技巧,在结束参数和第二个百分号之前添加逗号。这里:->where('column->objects', 'like', "%\"id\":$paramId,%")【参考方案2】:

您使用的是什么版本的 mysql? JSON 运算符 -> 直到 MySQL 5.7 才实现。见https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-column-path

另外,您没有正确使用运算符。对于您显示的示例,它应该是:

desc->>'$[0].club' = 'CHE'

>> 是为了使返回的值不包含双引号。

但是你在搜索哪个俱乐部? $[0] 仅搜索 JSON 数组中的第一个条目。如果您想查找 任何 条目是否有该 club = CHE,那么这将起作用:

JSON_SEARCH(j->'$[*].club', 'one', 'CHE') IS NOT NULL 

您可以在此处阅读有关 JSON 函数的更多信息:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html 和这里的路径语法:https://dev.mysql.com/doc/refman/5.7/en/json-path-syntax.html

我展示了原始 SQL 中的表达式。我会把它留给你来适应 Laravel。

【讨论】:

【参考方案3】:

试试这个:

->whereRaw('JSON_CONTAINS(`desc`, \'"club":"CHE"\')')

【讨论】:

看看这个:mattstauffer.com/blog/…。参考文献是否可以用来回答这个问题?【参考方案4】:
use Illuminate\Support\Facades\DB;

MyModel::where(DB::raw('metadata->>\'$.original_text\''), 'LIKE', $originalText)->first();

【讨论】:

以上是关于如何在 laravel 中查询 json 列的位置?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 搜索 JSON 数组以获取特定列的值

Laravel 使用相等运算符查询 MySQL JSON 列

Laravel json join,尝试加入具有多个 id 的 JSON 列和具有位置 id 的位置表,查询生成器

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

如何在 json 数据 laravel 5.1 中查询 Builder

Laravel 查询构建器:如何访问 JSON 键/值对