合并两个 Eloquent 集合并删除所有重复项。
Merge two Eloquent Collections and remove all duplicates.
我有两个数组,$user_roles
和 $global_roles
。我想创建一个新数组,我们称它为 $available_roles
,它可以等同于 $global_roles
中的项目减去 $user_roles
中的项目
我有以下代码可以对普通数组执行此操作。 $available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);
事实证明这是有问题的,因为 Laravel 在执行查询时不使用传统数组,而是使用 Eloquent 集合。
你们还有什么想法?
这很简单。您可以使用集合的 merge
方法:
$available_roles = $global_roles->merge($user_roles);
因为merge
内部使用了一个关联数组(字典),它使用id作为键,这应该会自动删除重复项。
无论如何,您可以使用 unique
:
删除集合中的重复项
$uniqueCollection = $collection->unique();
现在是为了合并,您实际上要查找的是两个集合之间的差异。您可以通过两种方式执行此操作:
$available_roles = $user_roles->diff($global_roles);
或
$available_roles = $global_roles->except($user_roles->modelKeys());
我有两个数组,$user_roles
和 $global_roles
。我想创建一个新数组,我们称它为 $available_roles
,它可以等同于 $global_roles
中的项目减去 $user_roles
我有以下代码可以对普通数组执行此操作。 $available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);
事实证明这是有问题的,因为 Laravel 在执行查询时不使用传统数组,而是使用 Eloquent 集合。
你们还有什么想法?
这很简单。您可以使用集合的 merge
方法:
$available_roles = $global_roles->merge($user_roles);
因为merge
内部使用了一个关联数组(字典),它使用id作为键,这应该会自动删除重复项。
无论如何,您可以使用 unique
:
$uniqueCollection = $collection->unique();
现在是为了合并,您实际上要查找的是两个集合之间的差异。您可以通过两种方式执行此操作:
$available_roles = $user_roles->diff($global_roles);
或
$available_roles = $global_roles->except($user_roles->modelKeys());