Laravel中Controller通过Model查询数据push到数组格式异常如何处理
问题原因
item::where('jobtype',$item)->get() 执行后返回的是Laravel的**集合(Collection)**实例,你每次调用array_push($data, $entry)是把整个集合作为单个元素插入到$data数组中,最终就会出现多层嵌套的输出结构。
修复方案
方案1:修改现有循环逻辑
如果需要保留循环查询的写法,将每次查询的结果元素合并到目标集合/数组中即可,示例如下:
class subcontroller extends Controller { public function Index(Request $req) { $arr = $req->get('myArray'); $data = collect(); // 初始化为空集合 foreach($arr as $item){ $entry = item::where('jobtype',$item)->get(); $data = $data->merge($entry); // 合并本次查询的所有元素 } return $data; } }
如果要直接操作数组,也可以用array_merge实现:
foreach($arr as $item){ $entry = item::where('jobtype',$item)->get()->toArray(); $data = array_merge($data, $entry); }
方案2:优化为单次查询(更推荐)
循环多次查询数据库会产生不必要的IO开销,直接用whereIn方法一次性查询所有符合条件的记录,返回结构直接符合你的预期:
class subcontroller extends Controller { public function Index(Request $req) { $arr = $req->get('myArray'); $data = item::whereIn('jobtype', $arr)->get(); return $data; } }
内容的提问来源于stack exchange,提问作者Muteeb Zafar
相关产品推荐
相关产品推荐

