У меня есть Model
с manyToMany
отношением:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
public function categories()
{
return $this->belongsToMany(Category::class, 'product_category', 'product_id', 'category_id');
}
}
Так что 1 Product
может иметь несколько Categories
.
Я пытаюсь выполнить запрос (получить) все Products
, которые имеют точное совпадение категорий:
Пример:
$categories = ['category1', 'category2'];
Product::whereHas('categories', function($q) use ($categories){
foreach ($categories as $categoryName) {
$q->where('name', $categoryName);
}
//or $q->whereIn('name', $categories);
})->get();
Также пробовали:
$categories = ['category1', 'category2'];
Product::whereHas('categories', function($q) use ($categories){
$q->whereIn('name', $categories);
}, '=', count($categories))->get();
Предположим, что мой Product
имеет только category1
прикреплен, запрос должен вернуть этот продукт.
Если Product
содержит оба categories
, но мой массив содержит только category1
, то этот Product
следует игнорировать.
Поэтому я пытаюсь добиться: получить только products
с конкретными категориями.Это возможно с Eloquent
или DB
строитель?
Псевдокод
$allow = for each Product->categories{
category Exist in $categories
}