/** * @param $exhibitionId * @param Carbon $since * @param Carbon|null $until * @return ScheduleCollection */ public function findByExhibitionAndDateInterval($exhibitionId, Carbon $since = null, Carbon $until = null) { if ($since === null) { $schedules = $this->schedule->where('exhibition_id', $exhibitionId)->get(); return new ScheduleCollection($schedules->all()); } $schedules = $this->find($since, $until, $exhibitionId); return $schedules; }
/** * @param array $data * @return Exhibition */ public function createAndSave(array $data) { $exhibition = isset($data['id']) ? Exhibition::find($data['id']) : new Exhibition(); if (isset($data['exhibition_film']['id'])) { $exhibitionFilm = ExhibitionFilm::find($data['exhibition_film']['id']); } else { $exhibitionFilm = new ExhibitionFilm(); } $exhibitionFilm->film_id = $data['exhibition_film']['film']['id']; $exhibitionFilm->save(); $exhibition->exhibitionFilm()->associate($exhibitionFilm); $exhibition->notes = isset($data['notes']) ? $data['notes'] : ''; if (isset($data['icon']['id'])) { $exhibition->type_id = $data['icon']['id']; } else { $exhibition->type_id = null; } $exhibition->save(); Schedule::where('exhibition_id', $exhibition->id)->delete(); $schedules = array_reduce($data['schedules'], function ($schedules, $rawSchedule) { $schedule = new Schedule(); $schedule->entry = $rawSchedule['entry']; $schedule->auditorium_id = $rawSchedule['auditorium']['id']; $schedules[] = $schedule; return $schedules; }, []); $exhibition->schedules()->saveMany($schedules); return Exhibition::findOrFail($exhibition->id); }