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

时间:2015-04-04 12:11:14

标签: arrays laravel collections eloquent

我有两个数组,$user_roles$global_roles。我想制作一个新数组,我们称之为$available_roles,在$global_roles中将项目等同于$user_roles中的项目,而不是$available_roles = array_unique(array_merge($global_roles, $user_roles), SORT_REGULAR);

中的项目

我有以下代码来执行普通数组。 {{1}}

由于Laravel在执行查询时不使用传统数组,因此使用Eloquent Collections,这被证明是有问题的。

你们有什么其他想法?

1 个答案:

答案 0 :(得分:16)

这很简单。您可以使用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());