Как фильтровать данные, используя отношение многие-ко-многим в Laravel?
Всем привет! Бьюсь уже 2 дня, но никак не могу решить задачу.
Есть таблица товаров, категорий, цветов и т.д. Также есть промежуточные таблицы для всех вышеперечисленных.
Для наглядности:
Таблица продуктов:
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('title', 100);
$table->integer('price')->index()->nullable();
$table->timestamps();
$table->softDeletes();
});
Таблица категорий
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('title', 100);
$table->timestamps();
$table->softDeletes();
});
Таблица цветов
Schema::create('colors', function (Blueprint $table) {
$table->id();
$table->string('title', 100);
$table->timestamps();
$table->softDeletes();
});
Таблицы отношений:
Schema::create('category_product', function (Blueprint $table) {
$table->id();
$table->bigInteger('product_id')->unsigned()->index();
$table->foreign('product_id')->references('id')->on('products');
$table->bigInteger('category_id')->unsigned()->index();
$table->foreign('category_id')->references('id')->on('categories');
$table->timestamps();
});
Schema::create('color_product', function (Blueprint $table) {
$table->id();
$table->bigInteger('product_id')->unsigned()->index();
$table->foreign('product_id')->references('id')->on('products');
$table->bigInteger('color_id')->unsigned()->index();
$table->foreign('color_id')->references('id')->on('colors');
$table->timestamps();
});
В модели категории:
public function products()
{
return $this->belongsToMany(Product::class);
}
В модели продукта:
public function categories()
{
return $this->belongsToMany(Category::class);
}
public function colors()
{
return $this->belongsToMany(Color::class);
}
Никак не могу понять, как, к примеру найти товары, у которых следующий запрос: Категория = кроссовки + Цвет = красный или зеленый
Работает такой запрос:
$category = Category::where('title', 'кроссовки')
->first();
$products = $category->products;
Но это не верно. Так как нужно получить записи с остальными связями, то есть куда-то прописать
->with('categories', 'genders', 'brands', 'colors', 'materials')
ну и у меня запрос не только по категории, а еще и по цветам. Еще работает такой запрос (с with), но тут я не могу понять, как добавить сортировку по категории и бренду:
$products = Product::query()
->with('categories', 'genders', 'brands', 'colors', 'materials')
->get();
Любая помощь будет полезна)) Вроде задача то примитивная, но никак не могу справиться.