2016-06-29 14 views
0

Hallo Ich möchte eine Liste der Produkte mit der ausgewählten Kategorie zurückgegeben. Ich habe zwei Tabellen verbunden Beziehungstabelle Produkte:Laravel Rückkehr Datensätze aus Relation Tabelle

public function up() 
{ 
    Schema::create('products', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('user_id')->unsigned(); 
     $table->integer('article_id')->unsigned(); 
     $table->integer('category_id')->unsigned(); 
     $table->string('sn'); 
     $table->integer('quantity'); 
     $table->date('warranty'); 
     $table->timestamps(); 
    }); 

    Schema::table('products', function(Blueprint $table) { 
     $table->foreign('user_id')->references('id')->on('users'); 
     $table->foreign('article_id')->references('id')->on('articles'); 
     $table->foreign('category_id')->references('id')->on('categories'); 
    }); 

} 

und Tisch Kategorien:

public function up() 
{ 
    Schema::create('categories', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('category_name'); 
     $table->timestamps(); 
    }); 
} 

Produktmodell:

public function user(){ 
    return $this->belongsTo('App\User'); 
} 

public function article(){ 
    return $this->belongsTo('App\Article'); 
} 

public function category(){ 
    return $this->belongsTo('App\Category'); 
} 

Und Kategoriemodell:

public function products(){ 
    return $this->hasMany('App\Product')->withTimestamps(); 
} 

schreibe ich SQL-Abfrage in phpMyAdmin:

SELECT 
     products.id, 
     products.user_id, 
     articles.article_name, 
     categories.category_name, 
     products.sn, 
     products.quantity, 
     products.warranty, 
     products.created_at, 
     products.updated_at, 
     SUM(quantity) AS ilosc 
     FROM 
     products 
     LEFT JOIN 
     categories ON products.category_id = categories.id 
     LEFT JOIN 
     articles ON products.article_id = articles.id 
     GROUP BY articles.article_name 
     ORDER BY id; 

Diese Abfrage auf phpMyAdmin funktioniert, aber ich will metohod in Laravel schreiben. Wie kann ich eine Liste von Produkten zurückgeben, die der ausgewählten Kategorie zugeordnet sind? Ich möchte hinzufügen, dass die gewählte Kategorie in der Methode der Einträge ID KATEGORIE geben wird:

public function show($id){ 
    $categories = Category::find($id); 

    return view('categories.showcategory', compact('categories')); 
} 

Ich will nicht eine Lösung, nur ein Hinweis, wie ich es tun kann. Ich fand dieses Thema enter link description here, aber ich weiß noch immer nicht, wie es zu tun;)

I Abfrage SQL konvertieren Laravel i CategoriesController Datei abzufragen:

public function show($id){ 
    $categories = Category::find($id); 
    $productsList = DB::table('products')->select('products.id, 
    products.user_id, 
    articles.article_name, 
    categories.category_name, 
    products.sn, 
    products.quantity, 
    products.warranty, 
    products.created_at, 
    products.updated_at, 
    SUM(quantity) AS ilosc')->from('products')->where('id' , '=' , $categories->id)->leftJoin('categories', 'products.category_id', '=', 'categories.id')->leftJoin('articles', 'products.article_id', '=', 'articles.id')->groupBy('articles.article_name')->orderBy('id')->get(); 

    return view('categories.showcategory', compact('categories', 'productsList')); 
} 

Aber Laravel Fehler zurückgegeben:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'products.id, ' in 'field list' (SQL: select products . id, as `` from products left join categories on products . category_id = categories . id left join articles on products . article_id = articles . id where id = 1 group by articles . article_name order by id asc)

mit Hilfe von swatkins schrieb ich Methode:

public function show($id){ 
$categories = Category::find($id); 
$productsList = Category::with(['products' => function ($query) { 
        $query->where('category_id', 20); 
       }])->get(); 
return view('categories.showcategory', compact('categories', 'productsList')); 
} 

Laravel gibt Produkte mit ausgewählter Kategorie korrekt zurück, aber nur wenn ich ID-Kategorie schreibe. Bei dieser Methode ist die ID-Kategorie gleich 20.

$ query-> where ('category_id',);

Wie kann ich den Wert von GET category_id dynamisch übergeben?

Antwort

0

Sie bereits eine Kategorie haben, müssen Sie nur eifrig Last, die die Beziehung Produkte:

public function show($id){ 
    $categories = Category::with(['products' => function ($query) { 
         $query->where('paid', true); 
        }])->find($id); 

    // this will give you a child property on your category 
    // called 'products' that will be an array of associated 
    // Product objects 

    return view('categories.showcategory', compact('categories')); 
} 

docs: https://laravel.com/docs/5.2/eloquent-relationships#eager-loading

+0

ich diese Methode in der Datei CategoriesController schrieb: 'public function show ($ id) { $ categories = Kategorie :: find ($ id); $ products = Kategorie :: mit ('products') -> find ($ id) -> get(); Rückansicht ('categories.showcategory', compact ('categories', 'products')); } 'Und in der Datei showcategory habe ich diese foreach-Schleife geschrieben:' @foreach ($ products als $ product) {{$ product-> products}} @ endforeach' laravel gibt mir alle Produkte zurück, und ich möchte laravel bezahlt haben nur Datensätze aus der ausgewählten Kategorie. Die Kategorie-ID wird in GET übergeben. – major697

+0

Sie können Filteranweisungen im Aufruf 'with' hinzufügen. Ich habe meine Antwort mit einem Beispiel aktualisiert.Die Dokumente sind ein wenig weiter unten unter "Constraining Eager Loads" – swatkins

+0

Immer noch alle Datensätze aus der Datenbank, und nicht nur diejenigen in der ausgewählten Kategorie (Ich schrieb dies: '$ products = Category :: with (['products' = > function ($ query) { $ query-> where ('kategorie_id', true); }]) -> findOrFail ($ id) -> get(); 'Wie kann ich die Abfrage-ID mit GET übermitteln? Ich habe es versucht: '... $ query-> where ('category_id', '=', $ categories-> id); ... Aber Laravel hat zurückgegeben ** Undefinierte Variable: Kategorien ** [link] (http : //iv.pl/images/76597680607175524685.png) – major697

Verwandte Themen