没有不值得去解决的问题,也没有不值得去学习的技术!

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

生成的 SQL 如下
1、在 MySQL 5.7 中,json 类型字段中的数据是数组,其值为:[365]。如图1
在 MySQL 5.7 中,json 类型字段中的数据是数组,其值为:[365]
图1
2、参考:查询构造器 – Where 语句 – JSON Where 语句:https://learnku.com/docs/laravel/6.x/queries/5171#35d9d9 。可以使用 whereJsonContains 来查询 JSON 数组。如图2
参考:查询构造器 - Where 语句 - JSON Where 语句:https://learnku.com/docs/laravel/6.x/queries/5171#35d9d9 。可以使用 whereJsonContains 来查询 JSON 数组
图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
生成的 SQL 如下
图3


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


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理