📜  laravel 查询 json - Javascript (1)

📅  最后修改于: 2023-12-03 15:02:37.446000             🧑  作者: Mango

在 Laravel 中查询 JSON

当我们在 Laravel 中使用 JSON 类型的字段保存数据时,如果需要进行查询操作,我们需要使用 Laravel 内置的查询构建器(Query Builder)中的 whereJsonContains 方法。

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 中非常实用的一种查询方式,使用灵活方便,可以提高我们的开发效率。因此,建议对此方法进行深入了解和掌握。