$ query->在多对多的关系中

时间:2018-03-08 12:45:26

标签: laravel laravel-5 laravel-5.5 laravel-eloquent laravel-orm

在我的控制器中,我设置了两个过滤器,用于分类(有一个关系) 和一个商店(多对多的关系)

public function products($filter = NULL, $key = NULL)
{
    $query = Product::query();
    $query = $query->where('status', '=', 1);
    if ($filter === 'category') {
        $cat = Category::where('slug', '=', $key)->select('id')->firstOrFail();
        $query = $query->where('category_id', '=', $cat->id);
    }
    if ($filtro === 'shop') {
        $shop = Shop::where('slug', '=', $key)->select('id')->firstOrFail();
        // HOW TO ADD HERE A WHERE IN MANY TO MANY RELATIONSHIP*
    }
    $products = $query->whereNotNull('startdate')->with('shops', 'categories')->orderby('startdate')->get();

*如何添加到查询A只有在设置了“购物”过滤器时才会有多少关系?

1 个答案:

答案 0 :(得分:1)

使用whereHas()方法,如下所示:

$query->whereHas('shops', function($q) use($shop) {
   $q->where('id', $shop->id); 
});

shops模型中定义Product关系,以使其发挥作用。