Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [Laravel] operacja na kolekcji z DTO

Napisany przez: john_doe 23.08.2019, 10:01:21

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(http://www.php.net/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 http://www.php.net/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.

Napisany przez: Pyton_000 2.09.2019, 12:11:56

A dlaczego nie napiszesz sobie Query które wyciągnie Ci te dane zsumowane prosto z bazy i wrzucić sobie w DTO gotowe dane?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)