如何查询 laravel 中的 json 列?
How can I make query where json column in the laravel?
我用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();
但是不行
我该如何解决这个问题?
只需使用 SQL LIKE
运算符
->where('desc', 'like', '%"club": "CHE"%');
您使用的 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'
双>>
是为了让返回的值不包含double-quotes.
但是你在找哪个俱乐部? $[0]
仅搜索 JSON 数组中的第一个条目。如果你想查找 any 条目是否包含该俱乐部 = 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.
试试这个:
->whereRaw('JSON_CONTAINS(`desc`, \'{"club":"CHE"}\')')
use Illuminate\Support\Facades\DB;
MyModel::where(DB::raw('metadata->>\'$.original_text\''), 'LIKE', $originalText)->first();
我用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();
但是不行
我该如何解决这个问题?
只需使用 SQL LIKE
运算符
->where('desc', 'like', '%"club": "CHE"%');
您使用的 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'
双>>
是为了让返回的值不包含double-quotes.
但是你在找哪个俱乐部? $[0]
仅搜索 JSON 数组中的第一个条目。如果你想查找 any 条目是否包含该俱乐部 = 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.
试试这个:
->whereRaw('JSON_CONTAINS(`desc`, \'{"club":"CHE"}\')')
use Illuminate\Support\Facades\DB;
MyModel::where(DB::raw('metadata->>\'$.original_text\''), 'LIKE', $originalText)->first();