Задать вопрос
@jjsf

Как отфильтровать Продукты по всем указанным Тегам у каждого из них?

Есть модель Product и Tags. Cвязал их через belongsToMany.
Как отфильтровать Продукты по всем указанным Тегам у каждого из них? т.е например чтобы у каждого товара были теги 44,34,21,54 ( не хотя один из них, а все)

$tags_pages=[44,34,21,54]; // Это лишь пример массива. Элементы и количество  массива меняется.  

$Product = Product::whereHas('tags', function($query) use($tags_pages)
     {            
          $query->whereIn('id',$tags_pages);
      })->get();

Так фильтруются продукты, если у них есть хотябы один указанный тег. А нужно что бы все указанные теги были у каждого продукта.

Пробовал так, но ничего на выходе 0 продуктов:

$tags_pages=[44,34,21,54];  // Это лишь пример массива. Элементы и количество  массива меняется.  
    $Product = Product::whereHas('tags', function($query) use($tags_pages)
         {    
               foreach($tags_pages as $tag){
                $query->whereIn('id', $tags_pages);
                }

          })->get();
  • Вопрос задан
  • 96 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@jjsf Автор вопроса
решение:
$tags_pages=[44,34,21,54]; // Это лишь пример массива. Элементы и количество  массива меняется.  

$Product = Product::whereHas('tags', function($query) use($tags_pages)
     {            
          $query->whereIn('id',$tags_pages);
      }, '=', count($tags_pages))->get();


т.е еще проверяем количество тегов
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ART_CORP
Hard work
Документацию читать надо, там все написано с примером.
You may also pass an array of conditions to the where function:

$users = DB::table('users')->where([
    ['status', '=', '1'],
    ['subscribed', '<>', '1'],
])->get();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы