J'ai besoin de commanderPar une colonne avec une collection.
J'ai besoin de orderBy(updated_at, 'desc')
toutes les publications appartenant à l'utilisateur actuellement connecté.
Voici mon code:
$posts = auth()->user()->posts->sortByDesc('updated_at');
Voici le modèle de l'utilisateur:
class User extends Authenticatable
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
Il ne renvoie aucune erreur et ne trie pas non plus!
Toute aide serait très appréciée.
P.S:
Je sais que je peux y arriver avec:
$posts = Post::where('user_id', auth()->user()->id)->orderBy('updated_at', 'desc')->get();
Mais j'aimerais faire la même chose avec les collections.
Voici comment trier avec SQL:
$posts = auth()->user()->posts()->orderBy('updated_at', 'DESC');
Et avec des collections:
$posts = auth()->user()->posts->sortByDesc('updated_at');
J'ai testé le 2ème et ça marche comme prévu.
@devk a raison. Ce que j'ai écrit dans le premier post est correct.
Le problème était dans DataTables dans la vue.
Il fallait ajouter cette ligne aux options de Datatables:
"order": [[ 5, 'desc' ]], // 5 is the `updated_at` column (the fifth column in my case)
Donc cela fonctionne bien:
$posts = auth()->user()->posts->sortByDesc('updated_at');
Essayez d'ajouter ce qui suit à votre modèle d'utilisateur.
public function posts_sortedByDesc(){
return $this->hasMany(Post::class)->sortByDesc('updated_at');
}
Ensuite, récupérez les publications en appelant posts_sortedByDesc
au lieu de posts