如何能够不用双层foreach获取本身想要的数据

1.今天在用地区表setting_area和国家表setting_country进行作业务时,罗列国家字段,想知道对应是哪一个地区而且要知道这个地区的详细信息,有人会使用双层foreach的写法,数量少,固然没问题,可是一旦遍历的必定量的数据,这个写法会被挨骂吧!laravel


2.抛出使用laravel的with方法,其实能够考虑使用数组key映射的思想。数组


3.例如先查出来全部的国家数据,国家里面时有个字段area_id关联是地区表主键,(建议吧地区名称area_name同时冗余到国家表中,),固然,这个反范式有好处也有很差的地方,这里不赘述,能够自行百度。code

国家表查出来吼,检索出对应的area_id,而且进行去重开发

用这个area_id的结果集,ids,到地区表进行wherein的查询get

重点来了,吧获取的id固然一个二维数组的key,能够用array_column实现。it

最后foreach获取的国家数据,用数组key映射的办法映射进去,便可。table


4.赋值代码以下:百度

$country = DB::table("setting_country")->get();
$ids = array_unique($country->pluck('area_id')->toArray());
$some_other_infos = SettingAreaModel::select()
->whereIn('id', $ids)
->get()
->toArray();
$new_array = array_column ($some_other_infos,null,"id");
foreach ($country as $key=>$item) {
    $country[$key]->area_info = $new_array[$item->area_id];
}

代码只是随手写写,开发的时候不建议使用Facades里的DB,建议区使用单例模式的思想去书写,更加优雅。foreach

相关文章
相关标签/搜索