Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Laravel] operacja na kolekcji z DTO
john_doe
post 23.08.2019, 10:01:21
Post #1





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Pyton_000
post 2.09.2019, 12:11:56
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A dlaczego nie napiszesz sobie Query które wyciągnie Ci te dane zsumowane prosto z bazy i wrzucić sobie w DTO gotowe dane?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 00:26