在 Laravel 6 中,使用 whereJsonContains 查询 json 类型字段中的数据(结构为数组)
1、在 MySQL 5.7 中,json 类型字段中的数据是数组,其值为:[365]。如图1
2、参考:查询构造器 – Where 语句 – JSON Where 语句:https://learnku.com/docs/laravel/6.x/queries/5171#35d9d9 。可以使用 whereJsonContains 来查询 JSON 数组。如图23、代码实现如下
$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
select * from `theme_saas_task` where json_contains(`theme_task_ids`, '365')
![在 MySQL 5.7 中,json 类型字段中的数据是数组,其值为:[365]](https://www.shuijingwanwq.com/wp-content/uploads/2022/12/1-11.png)


近期评论