- 本文地址: https://www.yangdx.com/2024/03/248.html
- 转载请注明出处
可以使用 whereJsonContains
方法来查询 JSON 数组,请看示例。
1、查询数组元素中有 en
:
$users = DB::table('users')
->whereJsonContains('options->languages', 'en')
->get();
/*
JSON字段:
options = {
"languages": ["de", "en", "fr"]
}
生成的SQL:
select * from `users` where json_contains(`options`, '"en"', '$."languages"')
*/
数组元素同时包含 en
和 de
:
$users = DB::table('users')
->whereJsonContains('options->languages', ['en', 'de'])
->get();
/*
生成的SQL:
select * from `users` where json_contains(`options`, '["en","de"]', '$."languages"')
*/
2、如果被查询数组元素是一个对象,可以传入 PHP 数组来匹配对象属性:
$users = DB::table('users')
->whereJsonContains('favorites->books', ['name' => '西游记'])
->get();
/*
JSON字段:
favorites = {
"books":[
{"id": 123, "name": "西游记", "img": "http://test.com/asd.jpg"},
{"id": 234, "name": "水浒传", "img": "http://test.com/qwe.jpg"},
{"id": 456, "name": "红楼梦", "img": "http://test.com/xyz.jpg"}
]
}
生成的SQL:
select * from `users` where json_contains(`favorites`, '{"name":"西游记"}', '$."books"')
*/
匹配多个:
$users = DB::table('users')
->whereJsonContains('favorites->books', [['name' => '西游记'], ['name' => '红楼梦']])
->get();
/*
生成的SQL:
select * from `users` where json_contains(`favorites`, '[{"name":"西游记"},{"name":"红楼梦"}]', '$."books"')
*/
综上,其实 Laravel 就是将 whereJsonContains
转换成 SQL 的 json_contains
语句来执行。
快来评论一下吧!
发表评论