合并两个Eloquent Collections并删除所有重复项.

Rij*_*rdt 10 arrays collections laravel eloquent

我有两个数组,$user_roles$global_roles.我想创建一个新的数组,让我们称之为它$available_roles,它可以等同于项中$global_roles的项目$user_roles

我有以下代码来执行普通数组. $available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);

这被证明是有问题的,因为Laravel在执行查询时不使用传统数组,它使用Eloquent Collections.

你们还有什么其他想法?

luk*_*ter 17

这很简单.您可以使用Collection的merge方法:

$available_roles = $global_roles->merge($user_roles);
Run Code Online (Sandbox Code Playgroud)

因为merge内部使用了一个使用id作为键的关联数组(字典),所以这应该会自动删除重复项.

无论如何,您可以使用unique以下方法删除集合中的重复项:

$uniqueCollection = $collection->unique();
Run Code Online (Sandbox Code Playgroud)

现在,合并你正在寻找的是两个集合之间的区别.您可以通过两种方式执行此操作:

$available_roles = $user_roles->diff($global_roles);
Run Code Online (Sandbox Code Playgroud)

要么

$available_roles = $global_roles->except($user_roles->modelKeys());
Run Code Online (Sandbox Code Playgroud)