Laravel中如何存储数组到数据库并查询还原原数组?
Laravel中数组存储与还原的最优方案
一、数组存入数据库的最优方式
用数据库的json类型字段(MySQL 5.7及以上版本支持),搭配Laravel模型的属性转换是最省心的方案:
- 定义模型的
$casts属性,指定字段自动在数组和JSON间转换:class Color extends Model { protected $casts = [ 'arraycolors' => 'array', ]; } - 存储时直接给字段赋值数组,Laravel会自动帮你序列化为JSON存入数据库:
$color = new Color(); $color->arraycolors = [['green'], ['yellow', 'white']]; $color->save(); - 如果不用模型,直接用DB门面操作,需要手动把数组转成JSON字符串:
DB::table('colors')->insert([ 'arraycolors' => json_encode([['green'], ['yellow', 'white']]) ]);
二、查询还原原数组的方法
你现在用DB::table()->value()拿到的是JSON字符串,所以得转换成数组才能和原结构一致,这里有两种常用方法:
方法1:用模型自动转换(推荐)
如果用模型查询,$casts会自动把JSON字段转回数组,不用手动处理:
$color = Color::find(1); $colors = $color->arraycolors; // 直接得到和原变量一致的嵌套数组
方法2:DB门面查询时手动反序列化
如果必须用DB门面,对查询结果用json_decode处理就行,记得传第二个参数true返回关联数组:
$colorsJson = DB::table('colors') ->where('id', 1) ->value('arraycolors'); $colors = json_decode($colorsJson, true); // 得到原结构的嵌套数组
内容的提问来源于stack exchange,提问作者Niek Neuvel
相关产品推荐
相关产品推荐

