1

我有 2 个模型集合。

例如

$full = collect([
    [
        'name' => 'name1',  //id was omitted intentionally
    ],
    [
        'name' => 'name2', //id was omitted intentionally
    ],
    [
        'name' => 'name3', //id was omitted intentionally
    ],
]);

$diff = collect([
    [
        'id'   => 6,
        'name' => 'name1',
    ],
]);

我想在这样的事情之后收到这样的结果

$full->diff($full);

$result = [
    [
        'name' => 'name2',
    ],
    [
        'name' => 'name3',
    ],
];

如何以更简洁的方式实现 filter()这一目标?reject()contains()

4

3 回答 3

2

很难说您为什么不想使用filterreject使用,contains但还有另一种解决方案:

$result = $full->pluck('name')->diff($diff->pluck('name'))->map(function($name) {
        return [
            'name' => $name
        ];
    });

dd($result->toArray());

结果你会得到:

array:2 [▼
  1 => array:1 [▼
    "name" => "name2"
  ]
  2 => array:1 [▼
    "name" => "name3"
  ]
]
于 2018-09-15T22:31:09.350 回答
1

diff 方法应该根据需要与仅包含 name 属性的新集合一起使用:

$comparableDiff = $diff->pluck('name');
$result = $full->diff($comparableDiff);
于 2018-09-15T22:19:51.773 回答
0

我还没有找到比

$profiles->reject(function ($profile) use ($existingProfiles) {
    return $existingProfiles->pluck('name')->contains($profile->name);
})->values()

但是感谢大家。我赞成你的问题;)

于 2018-09-15T22:35:14.793 回答