2016-04-12 13 views
1

Ich habe zwei Tabellen und eine Pivot-Tabelle:Laravel 5.2: Holen Modelle mehr Modelle gehören,

Table1: products 
id 
name 

Table2: categories 
id 
name 
parent 

Pivot table: product_categories 
product_id 
category_id 

Relationship between them is: 

    product belongsToMany category (trough product_categories) 
    category belongsToMany product (trough product_categories) 

, wenn seine Hauptkategorie, als Elternteil 0 ist, ist ansonsten eine ganze Zahl entspricht eine andere Kategorie von id. Ich habe eine Kategorie-ID, die Unterkategorien haben kann oder auch nicht und möglicherweise 0 oder mehr.

Ich brauche die Liste der Produkte der Kategorie und ihrer Unterkategorien. (Wenn keine Kategorie ausgewählt ist, als seine einfach: alle Bedürfnisse Produkte aufgeführt werden)

Zur Zeit habe ich die Liste der IDs der Kategorien in einem Array (oder in einer Sammlung):

$w = []; 
$w['parent'] = (!empty($id)?$id:0); 
$categories = Category::where('id', $w['parent'])->orWhere($w)->get()->toArray(); 

Wie kann ich das elegant machen? Jede Hilfe wäre erwünscht.

Antwort

0

Ich habe endlich die Antwort, hier ist es, wie ich gelöst:

$category_ids = Category::where('user_id', $user->id)->where('id', $id)->orWhere(['parent'=>$id])->pluck('id')->toArray(); 
$category_ids = array_unique($category_ids); 

$product_ids = ProductCategory::whereIn('category_id', $category_ids)->pluck('product_id')->toArray(); 
$product_ids = array_unique($product_ids); 

$products = Product::where('user_id', $user->id)->whereIn('id', $product_ids)->paginate(12); 

Solange die Kategorien maximal 2 Ebenen hat, das funktioniert.

0

Sie können eine OneToMany Beziehung zu der Kategorie Modell hinzufügen:

public function subcategories() 
    { 
     return $this->hasMany('\App\Category', 'parent_id'); 
    }