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

How to show Laravel model with belongsToMany connection if has specified connection?

我有这个产品型号:

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

在我的控制器中:

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

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

如何 显示已在 $request->category_id 中定义类别的产品?

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

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

您可以在 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