如何可以不用雙層foreach獲取自己想要的數據

1.今天同事在用地區表setting_area和國家表setting_country進行做業務時,羅列國家字段,想知道對應是哪個地區並且要知道這個地區的詳細信息,他使用了雙層foreach的寫法,數量少,當然沒問題,但是一旦遍歷的一定量的數據,這個寫法會被捱罵吧!


2.拋出使用laravel的with方法,其實可以考慮使用數組key映射的思想。


3.例如先查出來所有的國家數據,國家裏面時有個字段area_id關聯是地區表主鍵,(建議吧地區名稱area_name同時冗餘到國家表中,),當然,這個反範式有好處也有不好的地方,這裏不贅述,可以自行百度。

國家表查出來吼,檢索出對應的area_id,並且進行去重

用這個area_id的結果集,ids,到地區表進行wherein的查詢

重點來了,吧獲取的id當然一個二維數組的key,可以用array_column實現。

最後foreach獲取的國家數據,用數組key映射的辦法映射進去,即可。


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,建議區使用單例模式的思想去書寫,更加優雅。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章