如何解决 Laravel eloquent 中 json 数据的区分大小写的 where like 语句?
How can I solve case-sensitive where like statement on json data in Laravel eloquent?
我使用 Laravel 5.6 和 mysql 数据库。
我的Laraveleloquent查询是这样的:
Order::where('information->owner', 'like', '%'.$receipt.'%')->paginate(5);
信息字段是 JSON 类型。
{"owner": "Chelsea"}
如果$receipt
是Chel
,查询returns一个结果。
但如果$receipt
为chel
或CHEL
,则结果为空
我该如何解决这个问题?
如果每个所有者都以大写首字母开头,您可以使用 ucfirst
将字符串的首字母大写
$receipt = ucfirst($receipt);
Order::where('information->owner', 'like', '%'.$receipt.'%')->paginate(5);
尝试比较转换为小写或大写后的值。
Order::whereRaw('LOWER(JSON_EXTRACT(information, "$.owner")) like ?', ['"%' . strtolower($receipt) . '%"'])
->paginate(5);
我使用 Laravel 5.6 和 mysql 数据库。
我的Laraveleloquent查询是这样的:
Order::where('information->owner', 'like', '%'.$receipt.'%')->paginate(5);
信息字段是 JSON 类型。
{"owner": "Chelsea"}
如果$receipt
是Chel
,查询returns一个结果。
但如果$receipt
为chel
或CHEL
,则结果为空
我该如何解决这个问题?
如果每个所有者都以大写首字母开头,您可以使用 ucfirst
将字符串的首字母大写
$receipt = ucfirst($receipt);
Order::where('information->owner', 'like', '%'.$receipt.'%')->paginate(5);
尝试比较转换为小写或大写后的值。
Order::whereRaw('LOWER(JSON_EXTRACT(information, "$.owner")) like ?', ['"%' . strtolower($receipt) . '%"'])
->paginate(5);