在 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、代码实现如下
1 2 3 4 | $themeSaasTaskId = 365; $themeSaasTasks = ThemeSaasTask::whereJsonContains( 'theme_task_ids' , $themeSaasTaskId )->get(); print_r( $themeSaasTasks ); exit ; |
4、打印查询结果如下,符合预期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 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
1 | select * from `theme_saas_task` where json_contains(`theme_task_ids`, '365' ) |
近期评论