Pobraliśmy wyniki Model->find() w postaci ResultSet. Jak dodać kolejny ResultSet?
- Pobieramy zdarzenia dla pasującego dnia ’data’ – jeden resultSet
- Pobieramy zarzenia dla pasującego zakresu dat – date_from, date_to – drugi resultSet
- W widoku będziemy używali tylko pola data – z zakresu date_from i date_to utworzymy kopie encji z kolejnymi datami data
// ====== ZDARZENIA JEDNODNIOWE ========= $query = $this->Events->find()->find('forIndex'); $query->where(function($exp) use ($data_from, $data_to) { return $exp->between('data', $data_from, $data_to); }); $events = $query->all()->toList();
// ====== ZDARZENIA ZAKRES DAT ========= $query_all = $this->Events->find()->find('forIndex'); $query_all->where(['data IS' => null]); $query_all->where(['date_from IS NOT' => null, 'date_from >=' => $data_from]); $query_all->where(['date_to IS NOT' => null, 'date_to <=' => $data_to]); $events_all = $query_all->all();
Dołączenie drugiego zestawu do pierwszego – po korekcji
foreach($events_all as $event) { // Dodajemy projekty użytkwnika dla wydarzeń całodniowych $from_tz = strtotime($event->date_from->format("Y-m-d")); $to_tz = strtotime($event->date_to->format("Y-m-d")); if($from_tz < $to_tz) { $days = (($to_tz - $from_tz) / 86400) +1; // Ile dni trwa zdarzenie // Przechodzimy przez wszystkie dni z zakresu for( $tz = $from_tz; $tz <= $to_tz; $tz += 86400 ) { // Tworzymy nowe zdarzenie (kopię bazowego) dla każdego dnia $new_event = $this->Events->newEntity($event->toArray()); $new_event->days = $days; // nowe pole $new_event->data = new \DateTime( date('Y-m-d', $tz) ); // Uzupełniamy pole data array_push($events, $new_event); // dodajemy rekord do pierwszego ResultSet } } // Jeśli zakres dat jest taki sam elseif ($event->date_from == $event->date_to) { $event->data = $event->date_from; // uzupełniamy pole data array_push($events, $event); // Dodajemy istniejącą encję } }