Объединить коллекцию laravel, если даты совпадают, или добавить новую строку - PullRequest
1 голос
/ 26 мая 2020

у меня есть две коллекции, например ..

date         sum_total count_total
2020-05-10      10         5
2020-05-11      11         6
2020-05-13      5          7

вторая коллекция

date1         sum_total1   count_total2
2020-05-10      1              5
2020-05-12      2              4
2020-05-13      0              7

Мне нужен вывод, например ...

date         sum_total count_total
2020-05-10      11         10
2020-05-11      11         6
2020-05-12      2          4
2020-05-13      5          14

Мне нужно упорядочить данные по дате.

1 Ответ

1 голос
/ 26 мая 2020

Предполагая, что коллекции похожи на эти;

public function index()
{
    $first = collect([
        [
            'date' => '2020-05-10',
            'sum_total' => 10,
            'count_total' => 5,
        ],
        [
            'date' => '2020-05-11',
            'sum_total' => 11,
            'count_total' => 6,
        ],
        [
            'date' => '2020-05-13',
            'sum_total' => 5,
            'count_total' => 7,
        ]
    ]);

    $second = collect([
        [
            'date' => '2020-05-10',
            'sum_total' => 1,
            'count_total' => 5,
        ],
        [
            'date' => '2020-05-12',
            'sum_total' => 2,
            'count_total' => 4,
        ],
        [
            'date' => '2020-05-13',
            'sum_total' => 0,
            'count_total' => 7,
        ]
    ]);

    return $first->merge($second)
        ->groupBy('date')
        ->map(function ($sub) {
            return [
                'date' => $sub->first()['date'],
                'sum_total' => $sub->sum('sum_total'),
                'count_total' => $sub->sum('count_total'),
            ];
        })
        ->sortBy('date')
        ->values();
}

Он печатает;

[
  {
    "date": "2020-05-10",
    "sum_total": 11,
    "count_total": 10
  },
  {
    "date": "2020-05-11",
    "sum_total": 11,
    "count_total": 6
  },
  {
    "date": "2020-05-12",
    "sum_total": 2,
    "count_total": 4
  },
  {
    "date": "2020-05-13",
    "sum_total": 5,
    "count_total": 14
  }
]
...