合并两个 Eloquent Collection 并删除所有重复项。

问题描述 投票:0回答:1

我有两个数组,

$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。

大家还有什么其他的想法吗?

php arrays laravel eloquent collections
1个回答
32
投票

这相当简单。您可以使用 Collection 的

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

© www.soinside.com 2019 - 2024. All rights reserved.