web-dev-qa-db-fra.com

Laravel: orderPar une colonne avec des collections

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.

7
Anis Hamidi

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.

10
devk

@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');
1
Anis Hamidi

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

0
Jesse de gans