2015-08-13 15 views
6

ich auf etwas ein wenig bin stecken, die in der Regel ziemlich geradlinig. Ich brauche Datensätze aus einer hasMany Beziehung in einen kundenspezifischen Auftrag auf einem bestimmten Wert und ein ‚Sortierreihenfolge‘ Array zu sortieren.Sortierung nach Wunsch auf einer Laravel Beziehung Sammlung

Mein Code unten funktioniert nicht, weil ich vorbei usort() eine beredte Sammlung und ich bin nicht sicher, wie um es zu bekommen.

Vielleicht vermisse ich einige erstaunliche Laravel magische Helfer, aber ich stecke fest. Irgendwelche Gedanken oder Rat würden sehr geschätzt werden!

Prost

+0

Können Sie finden bitte posten die Array-Struktur von '$ go' wie als' print_r ($ gehen) 'zusammen mit dem erwarteten Ausgang –

Antwort

5

Die usort Äquivalent für Sammlung die sort ist() Methode. Es nimmt einen Rückruf als Parameter und gibt die sortierte Auflistung zurück.

Also in Ihrem Fall ist die Lösung:

$go = $go->sort(function ($a, $b) use ($order) { 
    $pos_a = array_search($a->colour, $order); 
    $pos_b = array_search($b->colour, $order); 
    return $pos_a - $pos_b; 
}); 
+0

das nach dem Verschieben es außerhalb der Beziehung Definition gearbeitet hat, da Beziehung Funktionen eine Beziehung zurückgeben muss. Danke für das tolle Beispiel! –

1

Ihre Sortierung nur dann angewendet werden, nachdem Sie das Ergebnis zu erhalten, während hier $go = $this->hasMany('Product')->orderBy('colour','DESC'); Sie nur eine Instanz einer Klasse bekommen, die zurückkehren wird zurückkehren wenn Sie Ihr Ergebnis anwenden eine get Methode darauf.

Für Ihren Zweck haben Sie sortBy method von laravel collections verwenden, nachdem Sie das Ergebnis Ihrer Daten erhalten Sie mehr (laravel Collection sortBy() method) & hier ist eine ähnliche Frage Antwort für Sie https://stackoverflow.com/a/28202985

+0

Danke für die Info über das Anwenden außerhalb der Beziehungsfunktion. Zwischen dir und Jedrzej hast du mein Problem gelöst, Prost! –

Verwandte Themen