首页 > 解决方案 > 如何比较 2 个集合的所有属性并返回 Laravel 上的不同对象?

问题描述

基本上我有相同模型(项目)的集合。

$items1 = Item::select('id','produto_id','endereco_id' ... )->where(...)get()
$items2 = Item::select('id','produto_id','endereco_id' ... )->where(...)get()

$items1 具有如下值:

[
0 => [
  'id'=> 2,
  'produto_id' => 4,
  'endereco_id' => 4,
], 
1 => [
  'id'=> 3,
  'produto_id' => 4,
  'endereco_id' => 5,
  ]
];

和 $item2 (可以有 N 个对象):

[
0 => [
  'id'=> 3,
  'produto_id' => 4,
  'endereco_id' => 5,
  ]
];

在此示例中,应返回它们之间的不同对象

[
  0 => [
  'id'=> 2,
  'produto_id' => 4,
  'endereco_id' => 4,
  ]
];

我可以在不迭代所有对象的情况下做到这一点来逐一比较属性吗?

标签: laravellaravel-5eloquent

解决方案


您可以使用集合差异方法(Laravel Docs

$diff = $items1->diff($items2);


推荐阅读