Sortieren von Daten mit Eloquent
Ich bin neu in laravel (geschaltet von CI) und eloquent ORM ist noch ein bisschen ein Rätsel zu einem bestimmten Zeitpunkt!
Hier ist mein problem :
Ich würde gerne zu Sortieren, die Daten aus meiner db mit Eloquent.
Ich habe eine Tabelle Beiträge und eine Tabelle Kommentare (Beitrag hat viele Kommentare und Kommentar gehört zu Beiträge)
Jeder Kommentar hat einen timestamp (=> created_at Feld), und ich möchte, um Dinge wie folgt :
(wir sind auf der profil-Seite, so dass $user->id ist die id des Benutzers (offensichtlich))
Möchte ich jeden post von posts, wo dieser Benutzer machte eine Bemerkung, und um all jene post, die durch das Feld created_at der Kommentar
Ich wirklich verwenden möchten Eloquent vollständig, oder zumindest Fließend, und ich weiß nicht den richtigen Weg, dies zu tun.
Ich hoffe, ich bin klar, und ich danke Ihnen für Ihre Zeit!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche problem auf ein Projekt, das ich entwickle. Wohin ich auch blickte, ich sah die
usort()
oderuasort()
als den vorgeschlagenen Weg, dieses problem zu lösen. (Collection::sort()
ist nur ein wrapper füruasort()
), aber das befriedigte mich nicht, denn warum würde ich PHP verwenden, um zu Sortieren, wenn SQL sollte es tun, für mich mit einer ORDER BY-Klausel??? Ich landete Umsetzung, es auf diese Weise mit einem getXXXAttribute () - Methode:return $this->hasMany('Comment')->orderBy('created_at', 'desc')
. credtIch hatte das gleiche problem vor, aber es war eine eins-zu-eins-Beziehung. Diese post hat mir geholfen. Ich landete mit einem join. Mein code war so:
So etwas helfen könnte.
Oder wenn Ihr problem ist noch komplexer:
Wie sortiert ein Feld der pivot-Tabelle in einer viele-zu-viele-Beziehung in Eloquent-ORM
Wenn Sie die Beziehung, die definiert in Ihrer Klasse user dann bekommst du alle Beiträge über die Kommentare. Es gibt eine Sammlung, welche die sortBy() und sortByDesc () - Funktionen. Beide Funktionen akzeptieren einen Rückruf, wo Sie können wählen Sie die sort-Methode selbst.
Das Problem, das Sie konfrontiert sind, ist, weil die Beziehung, die Sie definiert haben, ist nur geben Sie die Kommentare, die im Zusammenhang mit den posts und eine "Bestellung" auf, das Ergebnis wird nur die Sortierung der Kommentare, da sind die Kommentare, was da raus kommt, also, was Sie tun könnten, ist, dass auch definieren, dass "Kommentare" gehört zur "Post" in den Kommentaren Modell und dann finden Sie die Post der Kommentar zugeordnet ist, und verwenden Sie dann die usort() Funktion zum ausführen einer manuellen Vergleich ein Beispiel wäre (ich Schreibe den code in Laravel 3, aber Sie konnte wieder schreiben Sie für jede andere version):
So, Vorausgesetzt, dass Ihre Kommentare-Tabelle hat einen Fremdschlüssel genannt postID definiert die Beziehung mit der Posts-Tabelle und dem Zeitstempel der Posts-Tabelle ist der Standard - created_at und der Benutzer-Tabelle verbunden ist, um die Kommentare, die Tabelle mit dem Fremdschlüssel userid,
Helfen sollen, dieses Problem zu lösen, In der Realität ist dies nicht enthalten, in Laravel, denn es ist ein framework und Funktionen wie diese, die bestimmte Funktionen sind nicht in der Regel enthalten in der framework, da gibt es begrenzte Umfang der Nutzung, das sagte Sie auch diese Funktion in der Standard-DB-Klasse, so wie diese Funktionalität nutzen zu können universell im Projekt.