如何能夠不用雙層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

相關文章
相關標籤/搜索