2017-05-03 10 views
0

So habe ich eine products Tabelle und eine categories Tabelle und eine pivot Tabelle.Laravel Viele zu viele Abfrage

Produkt (products)

- id

- nennen

Kategorie (categories)

- id

- nennen

CategoryProduct (category_product)

- category_id

- product_id

ich alle Produkte erhalten möchten, die zu einer bestimmten Kategorie gehören, habe ich es geschafft, es zu erhalten, indem Sie die folgenden Aktionen ausführen Abfrage:

$products = Category::find(3)->products; 

Aber wie kann ich auf das Produktmodell zugreifen?

$products = Product::? 

Antwort

0

Sie benötigen die whereHas Klausel. https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-existence

$products = Product::whereHas('categories', function ($query) { 
    return $query->where('id', 3); 
})->get(); 

Oder Sie es mit einem statt beitreten tun können.

$products = Product::select('products.*') 
    ->join('category_product', 'products.id', '=', 'category_product.product_id') 
    ->where('category_product.category_id', 3) 
    ->groupBy('products.id') 
    ->get(); 
+0

SQLSTATE [23000]: Integritätseinschränkungsverletzung: 1052 Die Spalte 'id' in where-Klausel ist nicht eindeutig. Das ist der Fehler, den ich bekomme, wenn ich Ihren Code ausführen – robertmylne

+0

Welcher Ausschnitt gibt diesen Fehler? Haben Sie andere Klauseln, Bereiche usw. hinzugefügt? – fubar

+0

Das erste Snippet. – robertmylne