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

Laravel多表关联带pivot中间表如何从Product模型获取关联option_groups

实现方案

首先需要先在Option模型中定义与OptionGroup的从属关联,作为基础依赖:

// App/Models/Option.php
public function optionGroup()
{
    return $this->belongsTo(\App\Models\OptionGroup::class);
}

方案1:定义原生关联(支持预加载、关联查询)

该方案适合需要用关联做筛选、预加载的复杂场景,性能更优,在Product模型中添加如下方法即可:

// App/Models/Product.php
public function optionGroups()
{
    return $this->belongsToMany(\App\Models\OptionGroup::class, 'option_products', 'product_id', 'option_id')
        ->join('options', 'option_products.option_id', '=', 'options.id')
        ->join('option_groups', 'options.option_group_id', '=', 'option_groups.id')
        ->select('option_groups.*')
        ->distinct();
}

你可以直接通过$product->optionGroups获取关联数据,也支持预加载调用:Product::with('optionGroups')->get()。

方案2:访问器实现(只读场景更简便)

如果仅需要读取关联的选项组数据,不需要做关联增删改/查询筛选,可以直接复用已有的options关联实现,代码更简洁:

// App/Models/Product.php
public function getOptionGroupsAttribute()
{
    return $this->options->map->optionGroup->unique('id');
}

调用方式和方案1一致:$product->option_groups即可获取去重后的选项组集合。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:15:08