Laravel 9中如何用create方法将多维数组数据存入数据库
解决多维数组通过ModelName::create()存入数据库的问题
场景1:将整个多维数组存入单个数据库字段
如果要把多维数组作为整体存储(比如存在json类型字段),按以下步骤操作:
- 确保
ModelName模型允许level字段批量赋值,可选配置自动类型转换:
class ModelName extends Model { protected $fillable = ['level']; // 加入level字段到可批量赋值列表 // 可选:自动在数组与JSON格式间转换 protected $casts = [ 'level' => 'array', ]; }
数据库中
level字段类型设置为json或jsonb(jsonb支持索引,推荐使用)。直接调用
create方法传入多维数组:
ModelName::create([ 'level' => $this->level, // $this->level为你的多维数组,直接传入即可 ]);
Laravel会自动将数组序列化为JSON存入数据库,读取时也会自动转回数组(如果配置了$casts)。
场景2:将多维数组拆分为多条数据库记录
如果多维数组是一组数据集合,需要每条内层数组对应一条ModelName记录,正确的foreach写法如下:
假设$this->level的结构为:
$this->level = [ ['name' => '层级1', 'score' => 80], ['name' => '层级2', 'score' => 90], ];
循环创建记录的代码:
foreach ($this->level as $levelItem) { ModelName::create([ 'name' => $levelItem['name'], 'score' => $levelItem['score'], // 其他需要存入的字段 ]); }
排查你之前foreach失败的常见原因:
- 模型的
$fillable未包含要存入的字段(比如name、score),导致批量赋值被拦截; - Livewire表单绑定错误:表单元素的
name需写成level[][name]、level[][score]格式,这样$this->level才能正确接收为多维数组; - 内层数组的键名与数据库字段名不匹配,导致赋值失败。
内容的提问来源于stack exchange,提问作者Juvenalis Swai
相关产品推荐
相关产品推荐

