Laravel如何实现展示与当前商品同分类的相关商品功能

你需要先获取到当前商品的关联分类ID,再通过whereHas方法筛选出同分类下的商品即可,以下是适配你现有代码逻辑的调整方案:
前提准备
你需要先查询到当前访问的商品实例:
// 从路由参数slug获取当前商品 $currentProduct = Product::where('slug', $slug)->firstOrFail();
方案1:适配商品多分类场景(和你现有categories多对多关联逻辑匹配)
如果商品支持关联多个分类,直接通过关联查询筛选属于当前商品任意一个分类的商品:
$productsLike = Product::with('categories') ->where('slug', '!=', $slug) // 筛选和当前商品有相同分类的商品 ->whereHas('categories', function ($query) use ($currentProduct) { $query->whereIn('categories.id', $currentProduct->categories->pluck('id')); }) ->inRandomOrder() ->take(4) ->get();
方案2:适配商品单分类场景
如果商品仅属于一个分类,且商品表有category_id字段存储所属分类ID,可以简化写法:
$productsLike = Product::with('categories') ->where('slug', '!=', $slug) ->where('category_id', $currentProduct->category_id) ->inRandomOrder() ->take(4) ->get();
补充说明
如果当前分类下的关联商品不足4个,可以额外补充随机商品兜底,避免出现推荐位空缺的情况。
内容的提问来源于stack exchange,提问作者Patryk
相关产品推荐
相关产品推荐

