请问$builder =Product::query() 筛选,如何写关联搜索,谢谢!

product 是产品,一个产品属于一个分类 ;
type产品分类; 一个分类有多个产品;

前端需要 颜色 价格 分类筛选;

  $builder =Product::query();

    //这里颜色搜索 可正常使用
        if ( !empty($this->color) ) {

            $builder->where('color', $this->color);
        }

    //这里价格搜索 可正常使用
        if (!empty($this->price)) {
            $builder->where('price', $this->price);
        }

    //这里颜色分类搜索 会报错,但不知道如何写了!
    //一个商品属于一个分类 这里使用关联
         if (!empty($this->type)) {
            $builder->type()->where('name', $this->type);
        }

         $this->products = $builder->get();

以上写法 分类就会报错,请问下这么写错在哪里了? 谢谢了!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
Epona
最佳答案

要么使用join 要么使用类似下面的代码

$builder->whereHas('type', function($query) {
    $query->where('name', $this->type);
});

总之是不能 $builder->type()

3年前 评论
Epona (作者) 3年前
李小明 (楼主) 3年前
李小明 (楼主) 3年前
讨论数量: 1
Epona

要么使用join 要么使用类似下面的代码

$builder->whereHas('type', function($query) {
    $query->where('name', $this->type);
});

总之是不能 $builder->type()

3年前 评论
Epona (作者) 3年前
李小明 (楼主) 3年前
李小明 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!