2017-09-21 28 views
0

In Laravel 5.5 Ich versuche, eine kleine Anwendung zu schaffen, um Produkte von ein paar Verkäufer/Läden zu verwalten.Laravel Eloquent Beziehung Problem für mehrere Tabellen

Daher habe ich vier verschiedene Modelle wie folgt aus:

Seller.php

class Attribute extends Model 
{ 

    public function items() 
    { 

     return $this->belongsToMany(Item::class); 
    } 
} 

item.php

class Item extends Model 
{ 

    public function seller() 
    { 

     return $this->belongsTo(Seller::class); 
    } 

    public function category() 
    { 

     return $this->belongsTo(Category::class); 
    } 

    public function attributes() 
    { 

     return $this->belongsToMany(Item::class); 
    } 
} 

category.php

class Category extends Model 
{ 

    public function items() 
    { 

     return $this->hasMany(Item::class); 
    } 
} 

Attribut. php

class Attribute extends Model 
{ 

    public function items() 
    { 

     return $this->belongsToMany(Item::class); 
    } 
} 

Für die many-to-many-Beziehung zwischen Attributen & Artikel, I einer Pivot-Tabelle erstellt:

Schema::create('attribute_item', function (Blueprint $table) { 
    $table->integer('attribute_id')->unsigned()->index(); 
    $table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade'); 
    $table->integer('item_id')->unsigned()->index(); 
    $table->foreign('item_id')->references('id')->on('items')->onDelete('cascade'); 
    $table->primary(['attribute_id', 'item_id']); 
}); 

Das Ziel der gesamten Anwendung ist:

  • holen alle Artikel eines Verkäufers nach Kategorie mit Attributen (zum Filtern oder etwas)
  • Holen Sie sich einen bestimmten Artikel eines Verkäufers und erhalten Sie deren Attribute und Kategorie

Ich bin ein wenig verwirrt von Laravels Relationhip-Methoden und welche in diesem Fall zu verwenden.

Mai ist es besser zu hasManyThrough oder polymorphe Beziehungen?

Ich muss zugeben, dass ich hier ein kleines logisches Problem habe. Hoffentlich kannst du mir helfen.

Vielen Dank!

+0

Was ist Ihr Benutzermodell? –

+0

Sorry, vielleicht habe ich es ein bisschen verwirrend beschrieben. Mit "Benutzer" meine ich das Verkäufermodell –

Antwort

3

Sie whereHas Methode können Ihr erstes Ziel

die verschachtelte Beziehung finden wir zum Beispiel mit Attributen alle Artikel eines Verkäufers nach Kategorie holen (zum Filtrieren oder etwas)

Sie folgendes schreiben können:

$items = Item::whereHas('seller.items', function ($query) { 
     $query->whereHas('categories', function ($categories) { 
      $categories->where('name', '=', 'Mens'); 
     }) 
     ->orWhereHas('attributes', function ($attributes) { 
      $attriutes->where('size', '=', 'large'); 
     }); 
    })->get(); 

Finden Sie mehr über diese aus: https://laravel.com/docs/5.5/eloquent-relationships#querying-relationship-existence

Dies wird

geben Sie die Liste der Elemente, wenn Sie wollen Artikel mit Kategorien zu bekommen und Attribute Sie with Methode, um die relationale Daten verwenden können:

$items = Item::whereHas('seller.items', function ($query) { 
     $query->whereHas('categories', function ($caegories) { 
      $categories->where('name', '=', 'Mens'); 
     }) 
     ->orWhereHas('attributes', function ($attributes) { 
      $atributes->where('size', '=', 'large'); 
     }); 
    }) 
    ->with('categories', 'attributes') 
    ->get(); 

Hoffnung dieser Leitfaden Sie das Problem, das Sie konfrontiert sind.

+0

Dies ist fast die Lösung, die ich wollte.Um ehrlich zu sein, hatte ich die Hoffnung, dass ich eine Sammlung holen konnte, indem ich einfach so etwas tat: '$ seller-> items-> attributes()' und '$ seller-> items-> category' –

+0

Sorry, gepostet vorher Ich erkannte, dass Sie Ihre Post bearbeiten –

+0

Wenn Sie die Antwort mögen, können Sie sie annehmen und upvote. –