I abzurufen haben folgende DB-Struktur:Aufbau einer Abfrage Farben verfügbar Produkt
products: id, product_id, name, desc, etc...
categories: id, name, slug
product_category: product_id, category_id
product_colors: product_id, color_id
product_sizes: product_id, size_id
colors: id, value, hex
sizes: id, value
Ich habe auch die Strecke:/Kategorie/{Slug}, wo ein Benutzer alle Produkte, die unter einer Kategorie sieht, mit einem Sidebar zum Filtern nach Preis und anderen Kategorien. Was ist der beste Weg, um alle Produktfarben speziell die Produkte, die unter einer Kategorie geladen wurden, bestimmte Werte auch, so dass es keine doppelten Farben werden.
Abfrage Produkte abzurufen:
Product::whereHas('categories', function ($q) use ($cat_ids) {
return $q->whereIn('id', $cat_ids);
})->with(['colors', 'sizes', 'brand'])->get();
EDIT: Abrufen von Farben und Größen:
$sizes = collect($products->pluck('sizes'))->flatten()->pluck('value', 'id');
$colors = collect($products->pluck('colors'))->flatten()->pluck('value', 'id');
product.php:
public function categories() {
return $this->belongsToMany(Category::class, 'product_category');
}
public function colors() {
return $this->belongsToMany(Color::class, 'product_colors');
}
public function sizes() {
return $this->belongsToMany(Size::class, 'product_sizes');
}
category.php
public function products() {
return $this->belongsToMany(Product::class, 'product_category');
}
Color.php
public function products() {
return $this->belongsToMany(Product::class, 'product_colors');
}
Size.php
public function products() {
return $this->belongsToMany(Product::class, 'product_sizes');
}
Datenbank Namenskonvention: gute Praxis, wenn Sie Ihren Tabellennamen wie category_product ändern (IN ALPHABETICAL ORDER). –