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

Laravel需求:仅显示存在关联商品的分类

实现仅展示关联商品的分类列表

1. 确认模型关联关系

确保分类模型(Gmcategories)和商品模型(Gmproducts)已正确定义关联:

Gmcategories.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Gmcategories extends Model
{
    // 一个分类对应多个商品,外键需根据你的实际表字段调整
    public function products()
    {
        return $this->hasMany(Gmproducts::class, 'category_id');
    }
}

Gmproducts.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Gmproducts extends Model
{
    // 一个商品归属一个分类
    public function category()
    {
        return $this->belongsTo(Gmcategories::class, 'category_id');
    }
}

2. 控制器层面过滤有商品的分类

在控制器方法中,使用whereHas筛选出关联商品存在的分类,替代原有的全量查询:

示例控制器代码

namespace App\Http\Controllers;

use App\Models\Gmcategories;

class CategoryController extends Controller
{
    public function index()
    {
        // 仅查询拥有至少一个商品的分类
        $categories = Gmcategories::whereHas('products')->get();
        
        return view('your-view-path', compact('categories')); // 替换为你的实际视图路径
    }
}

如果需要附加商品状态筛选(比如仅显示关联上架商品的分类),可以在whereHas中追加条件:

$categories = Gmcategories::whereHas('products', function($query) {
    $query->where('status', 1); // 假设status=1代表商品上架
})->get();

3. (可选)模型中添加复用查询作用域

如果需要在多个场景复用该筛选逻辑,可在Gmcategories模型中定义查询作用域:

Gmcategories.php

public function scopeHasProducts($query)
{
    return $query->whereHas('products');
}

之后控制器中可简化调用:

$categories = Gmcategories::hasProducts()->get();

4. Blade视图直接渲染即可

因为控制器已过滤掉无商品的分类,视图无需额外判断,直接循环渲染:

示例Blade代码

<div class="category-list">
    @foreach($categories as $category)
        <div class="category-item">
            <h3>{{ $category->name }}</h3>
            <!-- 如需展示分类下商品,直接循环关联即可 -->
            <div class="product-list">
                @foreach($category->products as $product)
                    <span>{{ $product->name }}</span>
                @endforeach
            </div>
        </div>
    @endforeach
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:50:34