Объедините две коллекции Eloquent и удалите все дубликаты.

у меня есть два массива, $user_roles и $global_roles. Я хочу сделать новый массив, назовем его $available_roles, где его можно приравнять к элементам в $global_roles меньше элементов $user_roles

у меня есть следующий код, чтобы сделать это на обычном массиве. $available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);

это оказывается проблематичным из-за того, что Laravel не использует традиционные массивы при выполнении запроса, он использует красноречивые коллекции.

какие еще идеи у вас есть?

1 ответов


это довольно просто. Вы можете использовать коллекцию merge способ:

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

, потому что merge внутренне использует ассоциативный массив (словарь), который использует идентификатор в качестве ключа, это должно автоматически удалить дубликаты.

в любом случае, вы можете удалить дубликаты в коллекции, используя unique:

$uniqueCollection = $collection->unique();

теперь это было для слияние что вы на самом деле ищете -разница между двумя коллекции. Вы можете сделать это двумя способами:

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

или

$available_roles = $global_roles->except($user_roles->modelKeys());