Laravel Modifier les données de la collection de
Je me demande si Laravel ont aucune aide pour modifier une collection. Ce que je dois faire est de faire une requête avec paginate (), puis de vérifier si les utilisateurs connectés correspondance d'ID de l'expéditeur ou du récepteur et ajouter une nouvelle valeur à la sortie:
$userId = Auth::guard('api')->user()->user_id;
$allMessages = Conversation::join('users as sender', 'conversations.sender_id', '=', 'sender.user_id')
->join('users as reciver', 'conversations.recipient_id', '=', 'reciver.user_id')
->where('sender_id',$userId)->orWhere('recipient_id',$userId)
->orderBy('last_updated', 'desc')
->select('subject','sender_id','recipient_id','sender_unread','recipient_unread','last_updated','reciver.username as receivername','sender.username as sendername')
->paginate(20);
Maintenant, je veux faire quelque chose comme:
if ( $allMessages->sender_id == $userId ) {
//add new value to output
newField = $allMessages->sendername
} else {
//add new value to output
newField = $allMessages->receivername
}
Puis envoyer les données avec la nouvelle valeur ajoutée
return response()->json(['messages' => $allMessages],200);
Est-ce possible?
Vous devez vous connecter pour publier un commentaire.
Il est préférable d'utiliser la classe de Collection de fonctions intégrées pour cela. Par exemple, le
map
fonction serait parfait.https://laravel.com/docs/5.3/collections#method-map
Résolu en ajoutant:
Comme je ne sais pas qui Laravel version que vous utilisez, la prise de Laravel 5.2 permettez-moi de vous donner une façon plus intelligente pour faire face à cette (si je reçois votre problème correctement).
Vous pouvez utiliser Laravel est LengthAwarePaginatior(Les Docs de l'API).
N'utilisez pas paginer méthode lorsque vous construire votre requête, au lieu de cette utilisation simple méthode get pour avoir une simple collection.
Maintenant, vous pouvez renseigner des éléments supplémentaires dans la collection basée sur certaines conditions comme ça.
Maintenant utiliser LengthAwarePaginator, convertir qui ont peuplé collection dans un paginé collection.
La variable
$paginated_collection
peut maintenant être utilisé pour être envoyé en réponse. Espérons que cela vous aide à régler votre problème.