在 Laravel 6 中,使用 whereJsonContains 查询 json 类型字段中的数据(结构为数组)

1、在 MySQL 5.7 中,json 类型字段中的数据是数组,其值为:[365]。如图1

图1

2、参考:查询构造器 – Where 语句 – JSON Where 语句:https://learnku.com/docs/laravel/6.x/queries/5171#35d9d9 。可以使用 whereJsonContains 来查询 JSON 数组。如图2

图2

3、代码实现如下

$themeSaasTaskId = 365;
$themeSaasTasks = ThemeSaasTask::whereJsonContains('theme_task_ids', $themeSaasTaskId)->get();
print_r($themeSaasTasks);
exit;

4、打印查询结果如下,符合预期

Illuminate\Database\Eloquent\Collection Object
(
    [items:protected] => Array
        (
            [0] => Modules\ThemeStoreDB\Entities\ThemeSaasTask Object
                (
                    [table:protected] => theme_saas_task
                    [attributes:protected] => Array
                        (
                            [id] => 2
                            [type] => update_theme
                            [theme_task_ids] => [365]
                            [created_at] => 2022-12-21 08:06:49
                            [updated_at] => 2022-12-21 08:06:51
                        )

                    [fillable:protected] => Array
                        (
                        )

                    [connection:protected] => mysql
                    [primaryKey:protected] => id
                    [keyType:protected] => int
                    [incrementing] => 1
                    [with:protected] => Array
                        (
                        )

                    [withCount:protected] => Array
                        (
                        )

                    [perPage:protected] => 15
                    [exists] => 1
                    [wasRecentlyCreated] => 
                    [original:protected] => Array
                        (
                            [id] => 2
                            [type] => update_theme
                            [theme_task_ids] => [365]
                            [created_at] => 2022-12-21 08:06:49
                            [updated_at] => 2022-12-21 08:06:51
                        )

                    [changes:protected] => Array
                        (
                        )

                    [casts:protected] => Array
                        (
                        )

                    [dates:protected] => Array
                        (
                        )

                    [dateFormat:protected] => 
                    [appends:protected] => Array
                        (
                        )

                    [dispatchesEvents:protected] => Array
                        (
                        )

                    [observables:protected] => Array
                        (
                        )

                    [relations:protected] => Array
                        (
                        )

                    [touches:protected] => Array
                        (
                        )

                    [timestamps] => 1
                    [hidden:protected] => Array
                        (
                        )

                    [visible:protected] => Array
                        (
                        )

                    [guarded:protected] => Array
                        (
                            [0] => *
                        )

                )

        )

)

5、生成的 SQL 如下,如图3

图3

select * from `theme_saas_task` where json_contains(`theme_task_ids`, '365')
永夜