Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Laravel] operacja na kolekcji z DTO
Forum PHP.pl > Forum > PHP > Frameworki
john_doe
Hej,
poniżej mój testowy kontroler

  1. public function feedBalance($id)
  2. {
  3. $demandList = collect();
  4. $document = $this->documentRepository->get($id);
  5.  
  6. foreach ($document->details as $detail)
  7. {
  8. $demandList->push($this->foodSupplyService->getFeedBalance($detail));
  9. }
  10.  
  11. return view ........................;
  12. }


metoda getFeedBalance zwraca mi kolekcję takiego dto

  1. class FeedBalanceDto
  2. {
  3. public $_date;
  4. public $_day;
  5. public $_qty;
  6. public $_water;
  7. public $_feed;
  8. public $_weight;
  9.  
  10. public function __construct(array $options)
  11. {
  12. $this->_date = $options['date'];
  13. $this->_day = $options['day'];
  14. $this->_qty = $options['quantity'];
  15. $this->_water = $options['water'];
  16. $this->_feed = $options['feed'];
  17. $this->_weight= $options['weight'];
  18. }
  19.  
  20. //gettery
  21.  
  22. }


  1. Collection {#488 ▼
  2. #items: array:1 [▼
  3. 0 => Collection {#492 ▼
  4. #items: array:115 [▶]
  5. }
  6. ]
  7. }


  1. 0 => FeedBalanceDto {#772 ▼
  2. +_date: "2019-06-27"
  3. +_day: "26"
  4. +_qty: "4998"
  5. +_water: 879.648
  6. +_feed: 494802
  7. +_weight: 4548180
  8. }


Jaki jest mój cel: potrzebuję scalić wszystkie dto w jeden w ramach atrybutu "date" tzn sumować poszczególne klucze grupując po dacie.
Rezultatem miałaby być kolekcja DTO ale już zagregowanych co do date...
moje próby jak na razie kończą się na tym

narazie kończe na tym co nie daje rezultatu
  1. public static function SumCollections($collection)
  2. {
  3. return collect($collection->first())->keys()->mapWithKeys(function($item,$key) use($collection){
  4. return[
  5. $item => $collection->map(function ($mapItem, $mapKey) use($item) {
  6. return $mapItem[$item];
  7. })
  8. ];
  9. })->mapWithKeys(function($item,$key){
  10. $eachLine = collect($item->first())->keys()->mapWithKeys(function($mapItem) use($item){
  11. return[ $mapItem => $item->sum($mapItem) ];
  12. });
  13. return [$key => $eachLine];
  14. })->all();
  15. }


może powinienem jakoś lepiej przetrzymywać te dane aby łatwiej zsumować?
help...
p.s. _date w DTO zawsze leci od daty x + `1 dzień. Oczywiście 1sza data w każdym dto może być różna.
Pyton_000
A dlaczego nie napiszesz sobie Query które wyciągnie Ci te dane zsumowane prosto z bazy i wrzucić sobie w DTO gotowe dane?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2020 Invision Power Services, Inc.