Объедините две коллекции 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());