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

Laravel Backpack中如何按eraser分类筛选展示商品列表?

解决Laravel Backpack商品列表按特定分类筛选的问题

错误原因分析

你之前在Product模型的category关联方法中添加where('id',1),只会限制商品关联的分类数据(即只有分类ID为1的商品能获取到分类信息),但不会筛选商品列表本身,所以所有商品依然会显示在列表中。

正确解决方案

1. 恢复模型的关联方法

先把Product模型里的关联方法改回正常的关联定义,不要加额外的where条件:

public function category()
{
    return $this->belongsTo(Category::class);
}

2. 在Crud控制器中添加筛选条件

在ProductCrudController的setupListOperation方法里,添加全局查询约束,筛选出分类为eraser的商品:

方式一:按分类名称筛选(更灵活)
protected function setupListOperation()
{
    CRUD::column('name');
    CRUD::column('created_at');
    CRUD::column('updated_at');

    $this->crud->addColumn([
        'label'         => 'Category',
        'type'          => 'select',
        'name'          => 'category_id',
        'entity'        => 'category',
        'attribute'     => 'name'
    ]);

    // 添加分类筛选条件
    $this->crud->addClause('whereHas', 'category', function ($query) {
        $query->where('name', 'eraser');
    });
}
方式二:按分类ID筛选(性能更高)

如果你明确知道eraser分类的ID是1,可以直接通过category_id字段筛选:

protected function setupListOperation()
{
    // 原有列定义...

    // 添加分类筛选条件
    $this->crud->addClause('where', 'category_id', 1);
}

这样就能确保商品列表只显示属于eraser分类的商品了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:05:06