Laravel如何跨A、B两张表查询数据并在Blade中展示对应余额总和
实现方案
1. 模型层配置
首先在B表对应模型中定义一对多关联,假设模型命名为A、B,路径为app/Models/下:
- 打开
B.php添加关联方法:
// 定义B和A的一对多关联 public function a() { return $this->hasMany(A::class, 'b_id', 'id'); } // 可选:新增单独的余额统计关联,用于预加载优化性能 public function balanceTotal() { return $this->hasOne(A::class, 'b_id') ->selectRaw('b_id, SUM(balance) as total') ->groupBy('b_id'); }
2. 控制器层取数
根据需求查询B表数据并传给视图,推荐用预加载避免N+1查询问题:
// 方式1:预加载所有关联的A表记录 $bList = B::with('a')->get(); // 方式2:仅预加载余额统计值,数据量大时性能更好(推荐) $bList = B::with('balanceTotal')->get(); // 传值到视图 return view('你的视图路径', compact('bList'));
3. Blade视图使用
你原有的遍历写法有误,正确写法如下:
- 对应控制器方式1:
@foreach($bList as $bItem) {{ $bItem->a->sum('balance') }} @endforeach
- 对应控制器方式2:
@foreach($bList as $bItem) {{ $bItem->balanceTotal->total ?? 0 }} @endforeach
注意
你原代码中$B_TABLE->id是单个B表记录的id字段值,本身是数值不能遍历,需要遍历B表的记录集合才能逐个获取每个B记录对应的A表余额总和。
内容的提问来源于stack exchange,提问作者Sarwar Alam
相关产品推荐
相关产品推荐

