Ларавел 5.7.Вычесть экземпляры модели - PullRequest
0 голосов
/ 15 сентября 2018

У меня 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() аккуратно?

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Трудно сказать, почему вы не хотите использовать filter или reject с 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"
  ]
]
0 голосов
/ 16 сентября 2018

Я не нашел более аккуратного подхода, чем

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

Но спасибо всем.Я проголосовал за ваши вопросы;)

0 голосов
/ 16 сентября 2018

Метод diff должен работать по мере необходимости с новой коллекцией, содержащей только свойство name:

$comparableDiff = $diff->pluck('name');
$result = $full->diff($comparableDiff);
...