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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:15:45