/** * @param Film|Collection $item * @return array */ public function transform($item) { if ($item instanceof Film) { return $item->toArray(); } return parent::transform($item); }
/** * @param $fields * @param Carbon $since * @param Carbon $until * @param int $limit * @return \Illuminate\Pagination\Paginator */ public function findBy($fields, Carbon $since, Carbon $until, $limit = self::EXHIBITIONS_FOR_PAGE) { if (empty($fields)) { return Collection::make([]); } $builder = Film::getQuery(); $dateInterval = [$since->format(MYSQL_DATE_TIME_FORMAT), $until->format(MYSQL_DATE_TIME_FORMAT)]; foreach ($fields as $name => $value) { $builder->where($name, 'like', '%' . $value . '%'); } $results = $builder->get(['id']); if (empty($results)) { return \Paginator::make([], 0, 1); } $filmsIds = Collection::make($results)->map(function (\stdClass $dummyObject) { return $dummyObject->id; })->toArray(); $resourcesBuilder = Exhibition::whereHas('exhibitionFilm', function ($builder) use($filmsIds) { $builder->whereHas('film', function (Builder $builder) use($filmsIds) { $builder->whereIn('films.id', $filmsIds); }); })->whereHas('schedules', function (Builder $query) use($dateInterval) { $query->whereBetween('entry', $dateInterval); }); $resources = $this->addRelationships($resourcesBuilder, $limit); return $resources; }
/** * @param $slug * @return \Filmoteca\Exhibition\Type\Film */ public function findOneBySlug($slug) { $film = Film::where('slug', $slug)->limit(1)->firstOrFail(); return $film; }