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

Laravel视图中如何展示数据库关联表的订单配料数据?

解决订单视图中展示配料value字段的问题

先给你揪出一个小问题:你Ingredient模型里的关联写反啦!一个配料只属于一个订单,所以应该用belongsTo而不是hasMany,咱们先把这个修正过来,再一步步实现配料展示。

1. 修正模型关联关系

你的Order模型的关联是对的,保持不变:

// Order模型
public function ingredients(){
    return $this->hasMany(Ingredient::class);
}

把Ingredient模型的关联改成这样:

// Ingredient模型
public function order(){
    return $this->belongsTo(Order::class);
}

2. 控制器预加载关联数据(避免性能问题)

为了避免每个订单单独查询配料表的N+1性能问题,咱们在获取订单的时候用with()预加载配料数据:

// OrderController控制器
public function show(){
    // 预加载ingredients关联,一次性把所有关联数据查出来
    $orders = Order::where('vege', 0)->with('ingredients')->get();
    return view('home', ['orders' => $orders]);
}

3. 在视图中遍历展示配料

到了视图层,你就可以循环每个订单,再嵌套循环该订单的配料,直接输出value字段啦:

{{-- home.blade.php 视图文件 --}}
@foreach($orders as $order)
    <div class="order-card">
        <h3>订单 #{{ $order->id }}</h3>
        <p>下单时间: {{ $order->time }}</p>
        <div class="ingredients">
            <span>配料:</span>
            <ul>
                @foreach($order->ingredients as $ingredient)
                    <li>{{ $ingredient->value }}</li>
                @endforeach
            </ul>
        </div>
    </div>
@endforeach

这样处理后,每个订单对应的配料就能正常显示出来啦,而且预加载的方式也能保证页面加载更高效~

内容的提问来源于stack exchange,提问作者Adrelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:31:59