You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:36:04