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

Laravel 5.8中如何显示产品分类名称?

解决Laravel中显示产品关联分类名称的问题

作为Laravel 5.8的初学者,你现在需要通过关联模型来把分类ID转换成名称,具体可以按以下步骤操作:

1. 修正并更新ProductSelectedCategory模型

首先,你需要为每个分类ID字段定义与ProductCategory的关联关系,同时注意修正模型里的拼写错误(你写的$quarded是笔误,应该是$guarded)。

打开app/ProductSelectedCategory.php,添加以下关联方法:

class ProductSelectedCategory extends Model {
    protected $guarded = ['id']; // 修正拼写错误
    protected $fillable = ['subcategory1_id', 'parent_subcategory1_id', 'category_id', 'subcategory2_id', 'parent_subcategory2_id', 'subcategory3_id', 'parent_subcategory3_id', 'subcategory4_id', 'parent_subcategory4_id', 'subcategory5_id', 'parent_subcategory5_id', 'subcategory6_id', 'parent_subcategory6_id', 'subcategory7_id', 'parent_subcategory7_id', 'subcategory8_id', 'parent_subcategory8_id', 'subcategory9_id', 'parent_subcategory9_id', 'product_id' ];
    public $timestamps = false;

    // 主分类关联
    public function category()
    {
        return $this->belongsTo(ProductCategory::class, 'category_id');
    }

    // 子分类2及其父分类关联
    public function subcategory2()
    {
        return $this->belongsTo(ProductCategory::class, 'subcategory2_id');
    }

    public function parentSubcategory2()
    {
        return $this->belongsTo(ProductCategory::class, 'parent_subcategory2_id');
    }

    // 按照同样的逻辑,为subcategory1/subcategory3到subcategory9,以及对应的parent_subcategoryX_id添加关联方法
    // 比如subcategory1、parentSubcategory1,subcategory3、parentSubcategory3...以此类推
}

2. 在Blade模板中显示分类名称

现在你可以通过关联关系直接获取分类名称了,为了避免ID为0(无对应分类)时出现报错,建议用optional()辅助函数处理空值:

@foreach($products as $product)
    {{ $product->name }} - 
    {{ optional($product->selected_categories->first()->parentSubcategory2)->name ?? '未设置分类' }},
@endforeach
  • optional()会处理关联模型不存在的情况(比如parent_subcategory2_id为0时)
  • ?? '未设置分类'是当分类名称为空时显示的默认文本,你可以根据需求修改。

3. 优化性能:预加载关联

如果直接在循环中调用关联,会触发N+1查询问题(每个产品单独查一次分类),建议在控制器查询产品时预加载需要的关联:

// 只预加载你需要的parentSubcategory2关联
$products = Product::with('selected_categories.parentSubcategory2')->get();

// 如果需要同时加载多个分类关联
$products = Product::with([
    'selected_categories.category',
    'selected_categories.subcategory1',
    'selected_categories.parentSubcategory2'
])->get();

另外顺便提个小问题:你的Product模型里的category()方法外键写错了,目前是return $this->belongsTo('App\ProductCategory', 'id_producer');,这里的外键应该关联到分类字段,而不是id_producer,如果是笔误建议及时修正哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:15:14