Как объединить коллекции на основе совпадения значений конкретного ключа объекта в laravel6? - PullRequest
0 голосов
/ 14 января 2020

У меня есть три коллекции.

SalaryCollection

enter image description here

BonusCollection

enter image description here

Коллекция удержаний

enter image description here

Все они имеют дату, которая является общей для некоторых из них. Я хочу объединить эти три в одну коллекцию так, чтобы в результате объект с одинаковой датой в трех стал единым целым. Примерно так:

#items:array:2[
0=>{
+"date":"1-2020"
+"salaries":36500.0
+"deductions":1500.0
+"bonuses":7000.0
}
1=>{
+"date":"2-2020"
+"salaries":20000.0
+"deductions":1000.0
+"bonuses":5000.0
}
]

Как мне это сделать?

1 Ответ

0 голосов
/ 14 января 2020

Я не уверен, что это лучший способ сделать это, но именно так я и сделал.

     $salaryCollection = $salaryCollection->map(function ($item, $key) use ($bonusCollection) {
        $single_bonus = $bonusCollection->where('date', $item->date);
        if (!$single_bonus->isEmpty()) {
            return collect($item)->put('bonuses', $single_bonus->first()->bonuses);
        } else {
            return collect($item)->put('bonuses', 0);
        }
    });

    $salaryCollection = $salaryCollection->map(function ($item, $key) use ($deductionCollection) {
        $single_deduction = $deductionCollection->where('date', $item['date']);
        if (!$single_deduction->isEmpty()) {
            return collect($item)->put('deductions', $single_deduction->first()->deductions);
        } else {
            return collect($item)->put('deductions', 0);
        }
    });
...