📅  最后修改于: 2023-12-03 15:02:37.446000             🧑  作者: Mango
当我们在 Laravel 中使用 JSON 类型的字段保存数据时,如果需要进行查询操作,我们需要使用 Laravel 内置的查询构建器(Query Builder)中的 whereJsonContains
方法。
whereJsonContains
方法用于在 JSON 字段上进行查询,其语法如下:
whereJsonContains($column, $value, $boolean = 'and', $not = false)
$column
:要进行查询的 JSON 字段的名称;$value
:要查询的 JSON 中的值;$boolean
:多个 where
语句之间的连接符,默认为 ‘and’;$not
:如果设置为 true
,则查询条件为不包含此值。假设我们在 users
表中保存了如下格式的 JSON 数据:
[
{
"name": "Tom",
"age": 25,
"hobbies": ["reading", "music", "travel"]
},
{
"name": "Jack",
"age": 30,
"hobbies": ["movie", "football"]
},
{
"name": "Lucy",
"age": 28,
"hobbies": ["reading", "music"]
}
]
现在,我们想查询所有喜欢阅读("reading")的用户,使用 whereJsonContains
方法可以这样写:
$users = DB::table('users')
->whereJsonContains('hobbies', 'reading')
->get();
最终查询出来的结果为:
[
{
"name": "Tom",
"age": 25,
"hobbies": ["reading", "music", "travel"]
},
{
"name": "Lucy",
"age": 28,
"hobbies": ["reading", "music"]
}
]
如果要查询喜欢阅读和旅游的用户,可以使用数组形式传递多个查询条件:
$users = DB::table('users')
->whereJsonContains('hobbies', ['reading', 'travel'])
->get();
查询结果如下:
[
{
"name": "Tom",
"age": 25,
"hobbies": ["reading", "music", "travel"]
}
]
如果要查询不喜欢旅游的用户,可以设置 $not
参数为 true
:
$users = DB::table('users')
->whereJsonContains('hobbies', 'travel', 'and', true)
->get();
查询结果如下:
[
{
"name": "Jack",
"age": 30,
"hobbies": ["movie", "football"]
},
{
"name": "Lucy",
"age": 28,
"hobbies": ["reading", "music"]
}
]
whereJsonContains
方法是 Laravel 中非常实用的一种查询方式,使用灵活方便,可以提高我们的开发效率。因此,建议对此方法进行深入了解和掌握。