2015-08-13 12 views
6

Trochę utknąłem na czymś, co zwykle jest dość proste. Muszę posortować rekordy z wielu relacji w niestandardową kolejność na podstawie pewnej wartości i tablicy "porządek sortowania".Niestandardowe sortowanie w kolekcji relacji z laravelem

Mój poniższy kod nie działa, ponieważ przekazuję uSort() elokwentną kolekcję i nie jestem pewien, jak ominąć ten problem.

$go = $this->hasMany('Product')->orderBy('colour','DESC'); 

$order = array('RED', 'GREEN', 'BLUE', 'YELLOW'); 

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

return $go; 

Może brakuje mi jakiegoś niesamowitego magicznego pomocnika, ale utknąłem. Wszelkie przemyślenia lub porady będą mile widziane!

zdrowie

+0

Czy należy zakładać struktura tablicowa '$ go' podobnie jak' print_r ($ go) 'wraz z oczekiwanym wyjściem –

Odpowiedz

5

usort odpowiednikiem Collection jest sortowania() metodą. Przyjmuje wywołanie zwrotne jako parametr i zwraca posortowaną kolekcję.

Więc w twoim przypadku, rozwiązaniem jest:

$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

To działało po przeniesieniu go poza definicję relacji, ponieważ funkcje relacji muszą zwracać relację. Dzięki za świetny przykład! –

1

Twój sortowania zostaną zastosowane dopiero po otrzymać wynik, podczas gdy tutaj $go = $this->hasMany('Product')->orderBy('colour','DESC'); dopiero się instancję klasy, która powróci może wrócić Twój wynik, jeśli zastosujesz na nim metodę.

Dla celów trzeba użyć sortBy method z laravel collections Po uzyskaniu wyniku twoich danych można znaleźć więcej (laravel Collection sortBy() method) & tutaj jest podobna odpowiedź pytanie dla ciebie https://stackoverflow.com/a/28202985

+0

Dzięki za informacje o zastosowaniu tej funkcji poza relacją. Między tobą a jedrzejsem rozwiązałeś mój problem, okrzyki! –

Powiązane problemy