Laravel eloquant принадлежит множеству получаемых записей, принадлежащих отношениям

#eloquent #laravel-7

#eloquent #laravel-7

Вопрос:

Я использую отношения «многие ко многим» с таблицами products и product_categories, используя сводную таблицу product_product_category.

Модель продукта

 class Product extends Model
{
    public function product_categories() {
        return $this->belongsToMany(ProductCategory::class, 'product_product_category');
    }
}
  

Модель категории продукта

 class ProductCategory extends Model {

    public function products() {
        return $this->belongsToMany(Product::class, 'product_product_category');
    }

}
  

Что мне нужно сделать, так это когда я предоставляю массив категорий, необходимо получать продукты только с этими категориями.Это мой код

 $selectedCategotries = array(1, 2);
$products = Product::with(['product_categories' => function($q) use ($selectedCategotries){
    $q->whereIn('product_categories.id', $selectedCategotries);
}])->get();
  

Но вместо этого я получаю все продукты. Это будет большим подспорьем, если вы сможете предоставить мне решение.

Ответ №1:

Наконец, я нашел ответ с whereHas. Добавление ответа для всех, кто сталкивается с такой же проблемой.

 $products = Product::whereHas('product_categories', function ($q) use ($selectedCategotries) {
    $q->whereIn('product_categories.id', $selectedCategotries);
})->get();