提问者:小点点

搜索查询laravel 8


我正在尝试对产品和3个相关表进行搜索查询这是我迄今为止所做的:

$products = Product::with(['categories', 'tags','stags'])

        ->when(request('search'), function($query) {
            return $query->where('title','like','%' . request('search') . '%');
        })

        ->when(request('category_id'), function ($query) {
            return $query->whereHas('categories', function ($q) {
                return $q->where('id', request('category_id'));
            });
        })

        ->orderBy('place' , 'desc')
        ->paginate(12);

问题是,当我为stag和tag添加查询时:

$products = Product::with(['categories', 'tags','stags'])

        ->when(request('search'), function($query) {
            return $query->whereHas('tags', function ($q) {
                return $q->where('name', request('search'));
            })->orWhereHas('stags', function ($q) {
                return $q->where('name', request('search'));
            })->orWhere('title','like','%' . request('search') . '%');
        })

        ->when(request('category_id'), function ($query) {
            return $query->whereHas('categories', function ($q) {
                return $q->where('id', request('category_id'));
            });
        })

     

        ->orderBy('place' , 'desc')
        ->paginate(12);

Laravel忽略了我的category_id查询!


共1个答案

匿名用户

我认为当第一个查询返回true时,那么它就不会转到第二个category_id,当查询雄辩的时候你的标签,stags查询结果。这就是为什么您只看到'tags','stags'查询结果而不是category_id结果。

它类似于if-else结构:如果返回true结果,则else将不会执行
当文档:when()时阅读此文档