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

Laravel中如何通过ID关联查询获取同分类商品?

嘿,我来帮你解决这个问题!你现在需要通过传入的商品ID,获取和它同分类的其他商品对吧?其实分两步就很清楚:先拿到当前商品所属的分类ID,再用这个ID筛选出同分类的商品(记得排除当前商品本身哦)。下面给你两种实现方式,适配不同的写法习惯:

方法一:使用Eloquent模型(推荐,更符合Laravel最佳实践)

首先确保你已经创建了Product和Category模型,并且在Product模型中定义好和分类的关联关系:

// app/Models/Product.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    // 假设你的商品表是products,分类表是categories,外键是category_id
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

然后在控制器方法中这样写:

public function details($id)
{
    // 1. 获取当前商品,同时预加载分类关联,避免N+1查询问题
    $product = Product::with('category')->findOrFail($id);

    // 2. 获取同分类的其他商品,排除当前商品本身,按需选择需要的字段
    $relatedProducts = Product::where('category_id', $product->category_id)
        ->where('id', '!=', $id)
        ->select('id', 'name', 'description', 'image', 'price') // 这里可以补充你需要的其他字段
        ->get();

    // 将商品详情和相关商品传递到视图
    return view('products.details', compact('product', 'relatedProducts'));
}
方法二:使用DB门面(和你当前的写法风格一致)

如果你更习惯用原生查询的方式,也可以用DB门面来实现:

public function details($id)
{
    // 1. 先查询当前商品的分类ID
    $categoryId = DB::table('products')
        ->where('id', $id)
        ->value('category_id');

    // 2. 查询同分类的其他商品,排除当前商品
    $relatedProducts = DB::select('
        SELECT id, name, description, image, price 
        FROM products 
        WHERE category_id = ? AND id != ?
    ', [$categoryId, $id]);

    // 同时获取当前商品的详情(如果需要的话)
    $product = DB::select('
        SELECT id, name, description, image, price, ... 
        FROM products 
        WHERE id = ?
    ', [$id])[0];

    // 传递数据到视图
    return view('products.details', compact('product', 'relatedProducts'));
}

注意事项

  • 如果你的商品表中关联分类的外键不是category_id(比如是cat_id),记得把代码中的字段名替换成实际的名称
  • 可以根据需求给相关商品添加排序条件,比如在查询链末尾加上->orderBy('price', 'asc')或者->orderBy('created_at', 'desc')
  • findOrFail()方法会在商品ID不存在时自动返回404页面,比普通的find()更适合详情页的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:48:49