Laravel - как получить записи с точным соответствием категорий, используя отношение ownToMany - PullRequest
0 голосов
/ 30 ноября 2018

Продукты
-id
-титр

Категории
-id
-имя

ProductCategories
-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 голосов
/ 01 декабря 2018
$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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...