Search code examples
phplaravellaravel-5laravel-collectionlaravel-5.7

Laravel 5.7. Subtract model instances


I have 2 collections of models.

For example

$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',
    ],
]);

and I want to receive such a result after something like this

$full->diff($full);

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

How to achieve that without filter() or reject() with contains() in a neater way?


Solution

  • I haven't found a neater approach than

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

    But thanks to everyone. I've upvoted your questions ;)