Laravel中create()插入数据为null,insert()正常的原因排查
问题原因与解决办法
核心原因
create()是Eloquent的单条记录创建方法,它只接收一维数组(单条数据的键值对)。但你传入的$values是二维数组(多条记录的集合),此时create()会把数组的索引(如0、1等)当作字段名去匹配,而你的模型$fillable里没有这些字段,最终只会插入默认null值(仅自动维护的timestamps字段有值)。
而insert()方法原生支持二维数组批量插入,所以能正常工作。
解决方案
方案1:循环调用create()
遍历$values,逐个创建单条记录:
foreach($values as $value) { Order::create($value); }
方案2:使用insert()批量插入(推荐,性能更优)
直接用insert()处理二维数组:
Order::insert($values);
额外提示
如果需要触发Eloquent的事件钩子(比如creating、created),可以用saveMany():
$orderInstances = []; foreach($values as $value) { $orderInstances[] = new Order($value); } Order::saveMany($orderInstances);
内容的提问来源于stack exchange,提问作者laraCoder
相关产品推荐
相关产品推荐

