我使用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();
但它不起作用
我该如何解决这个问题?
答案 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();