2016-08-01 10 views
0

Ich habe Daten auf meinem PostgreSQL wie folgt aus:Laravel Sortierung nach bestimmten String

Hintergrund

id | Size 
1 | small 
2 | medium 
3 | large 

Kunst

id | name  | background_id 
1 | Shine  | 1 
2 | Sun  | 3 
3 | Mountain | 3 

Ich möchte Kunst Daten orderBy bekommen Hintergrund von seinem Wert von klein (klein, mittel, groß) mit l aravel eloquent

Art::with([ 'background' => function($background) { 
    $background->oderBy(DB::raw("what is this?")); 
} ])->get(); 

Wie man es repariert?

FIELD(type, 'S', 'M', 'L', 'XL') 

funktioniert nicht

Antwort

0

Sie können zusammen einen CASE WHEN Ausdruck verwenden, um mit orderByRaw():

$queryOrder = "CASE WHEN Size = 'small' THEN 1 "; 
$queryOrder .= "WHEN Size = 'medium' THEN 2 "; 
$queryOrder .= "ELSE 3 END"; 
Art::with('background') 
->orderByRaw($queryOrder); 
->get(); 
0

Ich würde eine order Feld der Hintergrund Tabelle hinzufügen, so ordening geändert werden kann, wenn ein neues Feld ist hinzugefügt, ohne Code ändern zu müssen. Dann können Sie die folgende Abfrage verwenden:

Art::with('background') 
->orderBy('background.order') 
->get(); 
+0

Es ist Show Fehler SQLSTATE [42P01]: Nicht definierte Tabelle: 7 ERROR: fehlende FROM-Klausel Eintrag für Tabelle –

+0

Haben Sie die '$ table' Eigenschaft in Ihrer' Art gesetzt 'Modell? – Jerodev