Laravel 9中Eloquent插入报Array to string conversion错误原因排查
问题排查:Eloquent批量插入触发“Array to string conversion”错误
环境与问题现象
环境:Laravel 9、PHP 8.0
需求:逐行插入数组数据
- 使用原生
DB::insert方法可正常执行 - 采用Eloquent写法时,触发“Array to string conversion”错误,报错行位于
$task->save();
原正常代码(原生DB)
$task = $request['task']; $datetask = $request['datetask']; $timetask = $request['timetask']; for ($i = 0; $i < count($task ); $i++) { DB::insert('insert into tasks (task,datetask,timetask)values(?,?,?)', [$task[$i],$datetask[$i],$timetask[$i]]); };
报错的Eloquent代码
for ($i = 0; $i < count($task); $i++) { $task= new Task; $task->task = $request['task']; $task->datetask = $request['datetask']; $task->timetask = $request['timetask']; $task->save(); }
问题原因
- 变量名冲突:循环内的
$task = new Task;覆盖了外部定义的$task = $request['task'];,导致后续循环的count($task)实际统计的是Task模型实例的属性数量,而非原数组长度,逻辑完全错误。 - 赋值错误:给模型字段赋值时,直接传入了整个请求数组(如
$request['task']),而非对应索引的单个值(如$request['task'][$i])。模型的task、datetask、timetask字段为字符串类型,将数组赋值给字符串字段时,PHP尝试将数组转为字符串,触发“Array to string conversion”错误。
修正后的Eloquent代码
$tasks = $request['task']; $dateTasks = $request['datetask']; $timeTasks = $request['timetask']; for ($i = 0; $i < count($tasks); $i++) { $task = new Task; $task->task = $tasks[$i]; $task->datetask = $dateTasks[$i]; $task->timetask = $timeTasks[$i]; $task->save(); }
内容的提问来源于stack exchange,提问作者Ing. Vakulin Oleg
相关产品推荐
相关产品推荐

