Fusionner deux collections éloquentes et supprimer tous les doublons.

j'ai deux tableaux, $user_roles et $global_roles. Je veux faire un nouveau tableau, nous allons l'appeler $available_roles, où il peut être assimilé comme les éléments $global_roles moins les éléments dans le $user_roles

j'ai le code suivant pour faire un tableau normal. $available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);

cela s'avère problématique en raison du fait que Laravel n'utilise pas les tableaux traditionnels quand on exécute une requête, il utilise des Collections éloquentes.

Quelles autres idées avez-vous?

9
demandé sur Rijnhardt 2015-04-04 15:11:14

1 réponses

C'est assez simple. Vous pouvez utiliser la Collection merge méthode:

$available_roles = $global_roles->merge($user_roles);

Parce que merge utilise en interne un tableau associatif (dictionnaire) qui utilise l'id comme clé, cela devrait automatiquement supprimer les doublons.

Quoiqu'il en soit, vous pouvez supprimer les doublons dans une collection en utilisant unique:

$uniqueCollection = $collection->unique();

Maintenant que c'était pour fusion ce que vous cherchez en fait est le différence entre deux collections. Vous pouvez le faire de deux façons:

$available_roles = $user_roles->diff($global_roles);

ou

$available_roles = $global_roles->except($user_roles->modelKeys());
15
répondu lukasgeiter 2015-04-04 13:28:50