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

时间:2018-03-21 14:04:41

标签: mysql json laravel eloquent laravel-5.6

我使用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();

但它不起作用

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

只需使用SQL LIKE运算符

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

答案 1 :(得分:0)

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

另外,您没有正确使用操作员。对于您显示的示例,它应该是:

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

double - >>是返回的值不包含双引号。

哪个俱乐部在搜索? $[0]仅搜索JSON数组中的第一个条目。如果你想查找任何条目是否有该俱乐部= 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。

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

use Illuminate\Support\Facades\DB;

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