Elw*_*win 11 php mysql json laravel eloquent
所以在Laravel 5中有一个方便的东西叫JSON Where Clauses使用MySQL的新功能来存储和获取存储在列中的JSON:
User::where('meta->colors', 'red')->get()
Run Code Online (Sandbox Code Playgroud)
将返回所有行,colors列中的位置meta将设置为red.
现在假设colors不是字符串,而是包含多种颜色的数组(colors => ['red', 'blue', 'green']).
什么是检索所有行的有效方法,其中colors包含例如值red?
sep*_*ehr 18
JSON_CONTAINS() 完全符合您的要求:
JSON_CONTAINS(target, candidate[, path])通过返回1或0来指示给定的候选JSON文档是否包含在目标JSON文档中,或者 - 如果提供了路径参数 - 是否在目标内的特定路径中找到候选.- 12.16.3搜索JSON值的函数
目前,Laravel的查询构建器不提供相应的API.虽然有一个开放的内部提议.
在此期间,您可以执行原始查询:
\DB::table('users')->whereRaw(
'JSON_CONTAINS(meta->"$.colors", \'["red"]\')'
)->get();
Run Code Online (Sandbox Code Playgroud)
这将返回其meta->colorsJSON字段中具有"红色"的所有用户.请注意,->运算符需要MySQL 5.7.9+.
您也可以whereRaw()直接在Eloquent模型上调用.
从5.6版本开始,Laravel的查询构建器包含一个新whereJsonContains方法.
我认为一种方法是使用like运算符:
User::where('meta->colors', 'like', '%"red"%')
Run Code Online (Sandbox Code Playgroud)
但是,只有当值不包含字符"并且分隔符不会更改时,这才有效。
| 归档时间: |
|
| 查看次数: |
10277 次 |
| 最近记录: |