2017-08-03 12 views
0

Ich versuche, eine beredte Abfrage in Laravel durch eine Spalte aus der Pivot-Tabelle zu sortieren.Laravel sortiert nach Pivot-Tabelle Spalte

Grundsätzlich solange das Produkt, das durch den Benutzer favorisiert wird, wird sie mit der Schwenktabelle hinzugefügt, und es sollte zuerst die favorited diejenigen zeigen, und dann die übrigen. Da werde ich foreach in der Klinge benutzen.

Produkte Tabelle enthält die folgenden Spalten:

id, category, product_name, priority, status, created_at, updated_at 

Benutzer Tabelle enthält diese Spalten:

id, name, email, created_at, updated_at 

mit Anschluss an die im Modell Benutzer:

public function favorites() 
{ 
    return $this->belongsToMany(Products::class, 'favorites', 'user_id', 'product_id') 
       ->withTimeStamps(); 
} 

Favoriten Tabelle enthält die folgenden Spalten :

id, user_id, product_id, created_at, updated_at 

In der Steuerung, die eloquent Abfrage ist zur Zeit:

$productinprogress = Products::all() 
    ->sortByDesc("priority") 
    ->where('status', 'inprogress'); 

Ich bin nur verwirrt, wie dies in Angriff zu nehmen.

ist Ihre Hilfe geschätzt. Ich danke dir sehr.

Antwort

0

können Sie so etwas wie unten verwenden:

$productinprogress = Products::all() 
    ->where('status', 'inprogress') 
    ->sortByDesc("priority"); 

und wenn Sie eine effiziente Lösung mit eifrigen Laden und Laden Favoriten zu wollen, verwenden Sie folgenden Code

$productinprogress = Products::all() 
    ->with('favorites') 
    ->where('status', 'inprogress') 
    ->sortByDesc("priority"); 
+0

BadMethodCallException Methode mit nicht existiert. – RSK

+0

Ich kann kein Prioritätsfeld in Ihrer Datenbank sehen, können Sie versuchen, die Priorität auf ein anderes Feld zu ändern, das dort vorhanden ist –

+0

Es ist tatsächlich verfügbar, vergessen, es in den oberen stellen. Also ist das Prioritätsfeld verfügbar. – RSK

0

Ich glaube, Sie zwei Abfragen machen sollten um zu vermeiden, doppelte Produkte zu laden, zuerst eins für Lieblingsprodukte, das zweite sollte etwas wie dieses sein:

Products::all()->sortByDesc("priority")->where('status', 'inprogress')->whereNotIn('id', $favorite_products); 

und dann in der Blade-Datei, machen Sie zwei foreach, erste für Favoriten und 2end für andere.