2017-08-28 4 views
1

ich eine einfache belongsToMany Beziehung in Modell OrderProduct haben:Laravel Beziehungen orderby

public function statuses() 
{ 
    return $this->belongsToMany(OrderProductStatusName::class, 'order_product_statuses') 
     ->withPivot('created_at'); 
} 

Ich möchte für ein Produkt alle Status haben, aber ich möchte, dass sie orderBy von Pivot-Tabelle auf created_at. Ich habe versucht, wie dies zu tun:

$orderProduct = OrderProduct::find($productId); 

$statuses = $orderProduct->statuses->orderBy('pivot_created_at', 'DESC'); 

Aber ich habe Fehler 500, dass Verfahren orderBy existiert nicht. Wie kann ich das machen?

+0

'statuses' würde eine Sammlung sein, die verwendet' sort' und 'sortBy' statt Eloquent des' orderBy' – aynber

+0

Ich habe versucht, wie Sie vorgeschlagen, aber immer noch 500-Fehler :( $ status = $ orderProduct-> statuses-> sortBy ('pivot_created_at', 'DESC'); – wenus

+0

Probieren Sie 'sortByDesc' statt.Wenn Sie einen Fehler 500 erhalten, sehen Sie sich immer die Fehlerprotokolle an, um den Grund herauszufinden. – aynber

Antwort

2

Beziehungen in Laravel können als Eigenschaft oder Methode verwendet werden. Wenn Beziehungen als Eigenschaft verwendet werden, wird eine Sammlung zurückgegeben. Wenn sie als Methoden verwendet werden, wird das Query Builder-Objekt zurückgegeben, und Sie können Methoden wie orderBy verketten. Also in diesem Fall sollten Sie den folgenden Code verwenden:

$statuses = $orderProduct->statuses()->orderBy('pivot_created_at', 'DESC')->get(); 
+0

Danke für einen sehr nützlichen Tipp !! :) – wenus