2017-05-22 1 views
0

J'ai une collection d'enregistrements récupérés via une relation, et je voudrais les commander par le champ created_at. Est-ce possible en Eloquent?Comment commander à nouveau une collection Eloquent?

Voici comment je suis en train de récupérer la collection:

$skills = $employee->skills;

Je voudrais commander cette collection $skills par leur création. J'ai essayé $skills->orderBy('created_at', 'desc'); mais la classe Collection n'a pas une méthode orderBy.

Je pense que ce problème est très simple et je manque quelque chose ..

Répondre

0

La raison pour cela est en échec que orderBy est une méthode de requête et non une méthode de collecte.

Si vous avez utilisé $skills = $employee->skills()->orderBy('created_at', 'desc')->get();, les compétences sont interrogées dans l'ordre souhaité. Vous pouvez également utiliser les méthodes sortBy ou sortByDesc si vous possédiez déjà une collection que vous vouliez commander à nouveau.

0

Vous devez ajouter la contrainte orderBy sur la requête au lieu de la relation.

Pour par exemple,

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

puis:

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

Si vous voulez que les résultats toujours être commandé par un champ, vous pouvez spécifier que la relation:

Employee.php

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

Si vous voulez juste les commander parfois, vous pouvez utiliser orderBy(), mais sur la relation, pas la propriété:

$skills = $employee->skills()->orderBy('created_at')->get(); 
0

Collection a sortBy et sortByDesc

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

Vous pouvez le faire de deux façons. Soit vous pouvez orderBy vos résultats alors que la requête, comme dans

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

OU

Vous pouvez utiliser sortBy et sortByDesc sur votre collection