Laravel多对多关联:如何获取关联模型字段并展示
在Laravel多对多关联中获取关联模型的指定字段
你已经走对第一步啦!Banks::with('principles')->get()这个基础查询框架没问题,要只拿到Principles表的principle字段,只需要做一点点调整,给你两种常用的方案:
方案一:在模型关联中固定要获取的字段
直接在Banks模型的principles关联方法里指定需要的字段,这样每次调用这个关联都会自动只拿这些字段(必须包含关联模型的主键id,不然Laravel没法匹配关联关系,会返回空集合哦):
// app/Models/Banks.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Banks extends Model { public function principles() { // 第二个参数是中间表名,虽然Laravel能自动识别,但明确写出来更清晰 return $this->belongsToMany(Principles::class, 'bank_principles') ->select('principles.id', 'principles.principle'); } }
之后你原来的控制器代码完全不用改,直接用$bankTransfer = Banks::with('principles')->get();就行,返回的每个Bank对象的principles集合里就只有id和principle字段了。
方案二:在查询时动态指定字段
如果不想固定关联的字段,想在不同查询里灵活调整,就用闭包的方式在with里指定:
// 控制器代码 $bankTransfer = Banks::with(['principles' => function ($query) { // 同样要包含id,不然关联匹配会失败 $query->select('id', 'principle'); }])->get();
如何在视图中展示
拿到数据后,在Blade视图里遍历展示就很简单了,举个例子:
@foreach($bankTransfer as $bank) <div class="bank-item"> <h4>{{ $bank->bank_name }}</h4> <!-- 假设Banks表有bank_name字段 --> <div class="principles-list"> <span>关联准则:</span> @foreach($bank->principles as $principle) <span>{{ $principle->principle }}</span> @endforeach </div> </div> @endforeach
关键提醒
一定要记得在select里包含关联模型的主键id!因为Laravel是通过主键来匹配中间表的principle_id,如果只选principle字段,Laravel找不到对应的关联关系,最终principles会是一个空集合,这点很容易踩坑~
内容的提问来源于stack exchange,提问作者I Love Code
相关产品推荐
相关产品推荐

