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?
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());