Laravel Eloquent查询表数据循环仅返回单条结果问题
问题根因
只返回单条数据是因为你在for循环内部写了return语句:PHP中return一旦执行就会立刻终止当前方法的运行,循环第一次跑到i=0的时候就直接返回第一条结果退出了,剩下9条数据对应的循环逻辑根本不会执行。
另外你代码里return return response()->json(...)多写了一个重复的return,属于语法笔误,运行时会直接抛出语法错误。
修复方案
不要在遍历全量数据的循环内部写返回逻辑,先完成遍历、数据插入操作,最后统一返回结果即可,两种常用实现方式如下:
方式1:手动遍历收集数据
$data = Portefeuille::where("portefeuilles.Cloture", "=", 0) ->where("portefeuilles.Octroye", "=", 1) ->join('echeanciers', 'echeanciers.NumDossier', '=', 'portefeuilles.NumDossier') ->where("echeanciers.DateTranch", "=", $dateDuJour) ->where("echeanciers.statutPayement", "=", 0) ->where("echeanciers.CapAmmorti", ">", 0) ->get(); $result = []; for ($i = 0; $i < sizeof($data); $i++) { // 这里写你插入另一张表的逻辑即可,不要在循环内return // 示例:OtherTable::create(['num_dossier' => $data[$i]->NumDossier]); $result[] = $data[$i]->NumDossier; } // 所有循环、插入逻辑执行完后,统一返回结果 return response()->json($result);
方式2:使用Laravel集合方法简化代码
get()查询返回的是Laravel集合实例,不需要手动写for循环,调用内置方法即可快速实现字段提取、批量遍历操作:
$data = Portefeuille::where("portefeuilles.Cloture", "=", 0) ->where("portefeuilles.Octroye", "=", 1) ->join('echeanciers', 'echeanciers.NumDossier', '=', 'portefeuilles.NumDossier') ->where("echeanciers.DateTranch", "=", $dateDuJour) ->where("echeanciers.statutPayement", "=", 0) ->where("echeanciers.CapAmmorti", ">", 0) ->get(); // 批量插入逻辑可直接遍历集合实现 // foreach ($data as $item) { // OtherTable::create(['num_dossier' => $item->NumDossier]); // } // 直接提取所有NumDossier字段值返回 return response()->json($data->pluck('NumDossier'));
注意事项
- 只要代码执行到
return,当前控制器方法/函数的运行会立刻终止,后续所有代码都不会执行,遍历全量数据的场景下禁止在循环内部调用return返回结果。 - 如果批量插入的数据量较大,不建议用循环逐条插入,可拼接好插入数据后用
insert()方法批量写入,减少数据库IO开销。
内容的提问来源于stack exchange,提问作者destiny
相关产品推荐
相关产品推荐

