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 `` fromproducts
left joincategories
onproducts
.category_id
=categories
.id
left joinarticles
onproducts
.article_id
=articles
.id
whereid
= 1 group byarticles
.article_name
order byid
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?
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
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
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