如果已指定连接,如何显示带有averageToMany连接的Laravel模型?

时间:2018-11-03 08:48:58

标签: laravel eloquent laravel-5.7

我有此产品型号:

public function categories() {
    return $this->belongsToMany('App\Category', 'product_categories');
}

在我的控制器中:

public function search(Request $request) {
    return Product::with([
        'categories' => function($categories) use ($request) {
            // ...
        }
    ]);
}

如果我尝试在$request函数中使用categories,则仅按类别搜索,但显示所有产品。

我如何仅显示产品信息已在$request->category_id中定义类别?

2 个答案:

答案 0 :(得分:1)

您可以在laravel中使用whereHas关键字:

public function search(Request $request) {
    return  Product::with('categories')
      ->whereHas('categories', function ($query) use ($request){
        $query->where('category_id', $request->category_id);
    })->get();
}

这里是docs

答案 1 :(得分:0)

您可以通过以下方式进行搜索:

public function search(Request $request) {
    return Product::with('categories')
            ->whereHas('categories', function ($q) use (request) {
                $q->where('id', $request->category_id);
            });
}