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

如何在Laravel Backpack中为多对多关联添加CRUD过滤器

多对多关联过滤器修复方案

原有代码的核心问题

  • 没有使用CRUD实例自带的查询构造器:你在回调里单独写Study::xxx->get()查询出来的结果不会被Backpack CRUD面板使用,自然不会生效,正确做法是直接修改$this->crud->query的查询条件
  • 筛选方法不匹配输入类型:你用的是text文本类型过滤器,传入的$value是字符串格式,不能用接收数组的whereIn方法
  • with('products')是关联预加载逻辑,只用来优化后续关联数据的查询性能,对Study列表的筛选没有任何作用,不需要加在筛选逻辑里

正确实现代码

$this->crud->addFilter([
            'type'  => 'text',
            'name'  => 'products',
            'label' => 'Produits'
        ],
            false,
            function($value) {
                $this->crud->query->whereHas('products', function($q) use($value) {
                    // 精确匹配产品名称
                    $q->where('name', $value);
                    // 如果需要模糊匹配,替换成下面这行即可
                    // $q->where('name', 'like', "%{$value}%");
                });
});

补充说明

如果你需要支持同时筛选多个产品名称,可以把过滤器类型改成select2_multiple,同时给过滤器第二个参数传入产品名称的选项数组,这时候传入的$value就是数组格式,就可以用whereIn方法做筛选了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:00:00