Laravel 5 Eloquent使用foreach循环插入数据报错排查
问题原因分析及解决方案
这个错误的根源是你对PHP中foreach循环的变量含义理解有误,咱们一步步拆解:
错误原因
当你写下这段代码时:
$test = array(123, 231, 321, 543); foreach($test as $key) { $data = array('name' => 'test_name', 'test' => $test[$key], 'property' => 'test_property'); Test_table::insert($data); }
这里的$key变量并不是数组的索引(比如0、1、2、3),而是直接拿到了数组里的元素值——也就是123、231、321、543。
这时候你再执行$test[$key],就相当于尝试访问$test[123]、$test[231]这类索引,但你的数组只有0-3这几个索引,根本不存在索引为123的元素,所以PHP就抛出了Undefined offset: 123的错误。
修正后的代码
你有两种简单的修正方式:
方式一:直接使用循环拿到的元素值
既然foreach($test as $value)里的$value就是你需要的123、231这些数值,直接用它就行:
$test = array(123, 231, 321, 543); foreach($test as $value) { $data = array( 'name' => 'test_name', 'test' => $value, 'property' => 'test_property' ); Test_table::insert($data); }
方式二:同时获取索引和元素值(如果后续需要索引的话)
如果你需要同时用到数组的索引和元素值,可以改成foreach($test as $index => $value)的写法:
$test = array(123, 231, 321, 543); foreach($test as $index => $value) { $data = array( 'name' => 'test_name', 'test' => $value, 'property' => 'test_property' ); Test_table::insert($data); }
为什么多维数组的方式能正常工作?
你构造多维数组的代码之所以没问题,是因为你直接把每个需要的数值(123、231等)手动填入了对应的数组项中,没有去错误地访问不存在的数组索引,所以Test_table::insert()可以正确识别并完成批量插入操作。
内容的提问来源于stack exchange,提问作者anaximander
相关产品推荐
相关产品推荐

