2017-05-22 3 views
0

Ich habe eine Sammlung von Datensätzen, die über eine Beziehung abgerufen wurden, und möchte sie über das Feld created_at bestellen. Ist das in Eloquent möglich?Wie man eine eloquente Sammlung neu anordnet?

Hier ist, wie ich die Sammlung bin Abrufen:

$skills = $employee->skills;

Ich möchte diese $skills Sammlung von ihrer Entstehung bestellen. Ich habe versucht, $skills->orderBy('created_at', 'desc');, aber die Sammlung Klasse hat keine orderBy Methode.

Ich denke, das Problem ist sehr einfach und ich bin etwas fehlt ..

Antwort

0

Der Grund dies nicht möglich ist, dass orderBy eine Abfragemethode ist.

Wenn Sie verwendet haben, würde dies die Fähigkeiten in der von Ihnen gewünschten Reihenfolge abfragen. Wenn Sie bereits eine Sammlung hatten, die Sie neu bestellen wollten, könnten Sie alternativ die Methoden sortBy oder sortByDesc verwenden.

0

Sie benötigen die orderBy Einschränkung für die Abfrage anstelle der Beziehung hinzuzufügen.

Für z.B.

$employees = Employee::where('salary', '>', '50000') // just an example 
         ->with('skills') // eager loading the relationship 
         ->orderBy('created_at', 'desc') 
         ->get(); 

und dann: keine Sammelmethode

foreach($employees as $employee) 
{ 
    var_dump($employee->skill); 
} 
0

Wenn Sie die Ergebnisse auf immer durch ein Feld bestellt werden möchten, können Sie das auf der Beziehung angeben:

Employee.php

public function skills() { 
    return $this->hasMany(Skills::class)->orderBy('created_at'); 
} 

Wenn Sie nur sie bestellen möchten manchmal können Sie orderBy() verwenden, aber auf die Beziehung, nicht die Eigenschaft:

0

Sammlung hat sortBy und sortByDesc

$skills = $skills->sortBy('created_at'); 
$skills = $skills->sortByDesc('created_at'); 
3

Sie dies auf zwei Arten tun können. Entweder Sie können Ihre Ergebnisse während Abfrage, wie in

$employee->skills()->orderBy('created_at', 'desc')->get(); 

ODER

Sie Ihre sortBy und sortByDesc auf collection

können orderBy
Verwandte Themen