2017-10-17 3 views
1

J'ai une requête qui court grouper par et ordre par avec le chargement désireux et il semble que le groupe par fonctionne bien mais l'ordre par ne fonctionne pas.Laravel ordre éloquent par le groupe par avec le chargement désireux

Message::whereIn('conversation_id',$msgs) 
     ->where('deleted', '!=', $userId) 
     ->with(array('last_sender' =>function($query) use ($userId){ 
       $query->where('id','!=', $userId); 
       $query->select('id', 'userName', 'profilePic','firstName', 'lastName'); 
      })) 

     ->with(array('last_reciever' =>function($query) use ($userId){ 
       $query->where('id','!=', $userId); 
       $query->select('id', 'userName', 'profilePic','firstName', 'lastName'); 
      })) 
     ->orderBy('id', 'desc') 
     ->orderBy('conversation_id', 'desc') 
     ->groupBy('id') 
     ->groupBy('conversation_id') 
     ->get(); 

Il renvoie des données comme celui-ci

{ 
"data": [ 
    { 
     "id": 133, 
     "conversation_id": 13, 
     "last_sender": null, 
     "last_reciever": { 
      "id": 55, 
      "userName": "buyer", 
      "profilePic": "pRBDBFJW55baSnF560Ajid8jTgPo5kmg4i5LMhPG.jpeg", 
      "firstName": "Matti", 
      "lastName": "Rames" 
     }, 
     "msg": "second message 2 to user second", 
     "attachment": null, 
     "deleted": 0, 
     "seen": 0, 
     "created_at": "2017-10-17 15:43:14", 
     "updated_at": "2017-10-17 15:43:14" 
    }, 
    { 
     "id": 132, 
     "conversation_id": 11, 
     "last_sender": null, 
     "last_reciever": { 
      "id": 54, 
      "userName": "Sadek", 
      "profilePic": "Nir7zgorNT2dmwcXJdhNK3ZmPAltmkEnj0SXDCDC.png", 
      "firstName": "Sadek", 
      "lastName": "Hossain" 
     }, 
     "msg": "second message to first user", 
     "attachment": null, 
     "deleted": 0, 
     "seen": 0, 
     "created_at": "2017-10-17 15:38:16", 
     "updated_at": "2017-10-17 15:38:16" 
    }, 
    { 
     "id": 131, 
     "conversation_id": 13, 
     "last_sender": null, 
     "last_reciever": { 
      "id": 55, 
      "userName": "buyer", 
      "profilePic": "pRBDBFJW55baSnF560Ajid8jTgPo5kmg4i5LMhPG.jpeg", 
      "firstName": "Matti", 
      "lastName": "Rames" 
     }, 
     "msg": "second message to second user", 
     "attachment": null, 
     "deleted": 0, 
     "seen": 0, 
     "created_at": "2017-10-17 15:37:49", 
     "updated_at": "2017-10-17 15:37:49" 
    }, 
    { 
     "id": 130, 
     "conversation_id": 11, 
     "last_sender": null, 
     "last_reciever": { 
      "id": 54, 
      "userName": "Sadek", 
      "profilePic": "Nir7zgorNT2dmwcXJdhNK3ZmPAltmkEnj0SXDCDC.png", 
      "firstName": "Sadek", 
      "lastName": "Hossain" 
     }, 
     "msg": "Hi how are you", 
     "attachment": null, 
     "deleted": 0, 
     "seen": 0, 
     "created_at": "2017-10-17 15:36:49", 
     "updated_at": "2017-10-17 15:36:49" 
    } 
] 

}

Mais je veux seulement revenir les deux premiers derniers résultats. Je sais que j'ai ajouté ->groupBy('id') qui est inutile ici et renvoyant tous les enregistrements. Je l'ai ajouté juste pour montrer quelles sont mes données. Donc, si je supprime ->groupBy('id') alors il ne renvoie que l'ID 131 et 130

S'il vous plaît aider. Je vous remercie.

Répondre

1

Ok je le résous en ajoutant une ligne supplémentaire :) Je poste pour les aides des autres.

->orderBy('created_at', 'desc') 
->get() 
->unique('conversation_id');