Laravel控制器foreach循环中如何拼接获取多个country对应的division数据
解决方案
你之前的写法存在两个问题:一是每次循环都直接给$dis赋值,新的查询结果会覆盖上一轮的结果,所以只能拿到最后一个国家的Division数据;二是拼接字符串的写法只是把国家名拼接成了普通字符串,没法直接用于查询。
下面提供两种符合你要求的实现方式:
方式1:循环追加查询结果(匹配你想要的循环查询逻辑)
把$dis初始化为Laravel集合,每次循环将当前查询到的Division数据合并到集合中即可:
$countries = DB::table('countries')->where('student_id', '=', $id)->get(); // 初始化空集合存储所有Division数据 $dis = collect(); foreach($countries as $country){ $currentDis = DB::table('divisions')->where('country_name', '=', $country->country_name)->get(); // 合并当前查询结果到总集合 $dis = $dis->merge($currentDis); } dd($dis);
方式2:更高效的一次性查询(推荐)
不需要循环查数据库,先把学生关联的所有国家名提取为数组,再用whereIn一次查询出所有匹配的Division数据,仅需要2次SQL查询,性能远高于循环查询:
// 直接提取学生关联的所有国家名数组 $countryNames = DB::table('countries')->where('student_id', $id)->pluck('country_name'); // 一次性查询所有对应Division数据 $dis = DB::table('divisions')->whereIn('country_name', $countryNames)->get(); dd($dis);
内容的提问来源于stack exchange,提问作者Sayma Obaida
相关产品推荐
相关产品推荐

