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

Laravel 5.8 如何获取三个互相关联模型的对应数据

实现方法

你需要用到Laravel的嵌套预加载功能,操作非常简单:

  • 首先确认ProductOrder模型中已经定义了指向Product模型的关联方法,示例如下:
// App/Models/ProductOrder.php
public function product()
{
    return $this->belongsTo(Product::class);
    // 如果外键名不是默认的product_id,需要手动指定第二个参数,比如:
    // return $this->belongsTo(Product::class, 'prod_id');
}
  • 把原查询的预加载参数改成点语法拼接的嵌套关联即可,代码如下:
Order::with('product_orders.product')->get();

返回的结果集中,你可以直接通过$order->product_orders->first()->product获取对应Product数据,全程不会产生N+1性能问题。
如果需要给关联层加自定义查询条件,可以用数组格式的预加载写法:

Order::with([
    'product_orders' => function ($query) {
        // 可自定义ProductOrder的查询逻辑,比如过滤退款的条目
        $query->where('refund_status', '!=', 'success');
    },
    'product_orders.product' => function ($query) {
        // 可自定义Product的查询逻辑,比如只返回必要字段
        $query->select('id', 'name', 'price');
    }
])->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:27:01