Добавление суммы в метаданные фрактальной коллекции - PullRequest
0 голосов
/ 05 сентября 2018

как я могу перебрать все элементы из коллекции, чтобы получить сумму ключа в объектах?

$data = fractal()
            ->collection($items, new ItemTransformer())
            ->paginateWith(new IlluminatePaginatorAdapter($paginator))
            ->addMeta([
                'from' => $from->toDateString(),
                'till' => $till->toDateString(),
            ])
            ->toArray();

в addMeta () я хочу включить 'total_sum' всех элементов-> цена-> значение.

когда я добавляю это так:

$totalSum = $items->sum(function($item){
    return $item->price->sum('value);
}

    $data = fractal()
                ->collection($items, new ItemTransformer())
                ->paginateWith(new IlluminatePaginatorAdapter($paginator))
                ->addMeta([
                    'from' => $from->toDateString(),
                    'till' => $till->toDateString(),
                    'total_sum' => $totalSum,
                ])
                ->toArray();

не перебирает всю коллекцию, а перебирает все значения в таблице элементов.

Ответы [ 2 ]

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

Мой текущий подход:

        $seller = $this->sellerRepository->findOrFail($id);
        $query = $seller->items()->whereHas('baseItem');
        $totalSum = $query->get()->sum(function ($item) {
                return $item->baseItem->price->value;
            });
        $paginator = $query->paginate($request->get('_perPage', $this->sellerRepository->getPerPage()));
        $items = $paginator->items();

        $data = fractal()
            ->collection($items, new ItemTransformer())
            ->paginateWith(new IlluminatePaginatorAdapter($paginator))
            ->addMeta([
                'from' => $from->toDateString(),
                'till' => $till->toDateString(),
                'total_sum' => $totalSum,
                'page_sum' => collect($items)->sum(function ($item) {
                        return $item->baseItem->price->value;
                    }),
            ])
            ->toArray();

        return response()->json($data);
    }

Спасибо за ваши подсказки.

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

Может это сработает?

$sum = 0;
$totalPrice = $items->price;
foreach($totalPrice as $key=>$value){

if(isset($value->value))   
    $sum += $value->value;
}

echo $sum;
...