Laravel-如何使用belongsToMany关系获取与类别完全匹配的记录

时间:2018-11-29 23:45:22

标签: laravel-5.6

产品
-ID
-标题

类别
-ID
名称

产品类别
-Products_id
-Categories_id

我想实现的目标是获取至少与所有选定类别匹配的所有产品(例如:[1,4,6,9])

并跳过只有一个或多个匹配类别(例如:[6,9])的产品

到目前为止,

我的代码...显示了要跳过的产品

关系

public function productcats()
    {
        return $this->belongsToMany('App\Categories', 'ProductCategories', 'Products_id ', 'Categories_id');
    }



$cats = [1,4,6,9];



Products ::whereHas('productcats', function($query) use ($cats){
                            $query->whereIn('Categories_id', $cats );
                        })
                        ->paginate(10);

1 个答案:

答案 0 :(得分:0)

$products = Products ::whereHas('productcats', function($query) use ($cats){
                            $query->whereIn('Categories_id', $cats )
                                  ->groupBy('Products_id')
                                  ->havingRaw( 'COUNT(Products_id) = ?', [count($cats)] );
                        })
                        ->paginate(10);

对于任何可能需要它的人,我都从这里得到了指导的答案:http://www.sergiy.ca/how-to-write-many-to-many-search-queries-in-mysql-and-hibernate/

3。查找所有至少用tag1,tag2,...,tagn标记的文章