diff options
Diffstat (limited to 'app/Http/Controllers/CinemaController.php')
| -rw-r--r-- | app/Http/Controllers/CinemaController.php | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/app/Http/Controllers/CinemaController.php b/app/Http/Controllers/CinemaController.php new file mode 100644 index 0000000..c1cb215 --- /dev/null +++ b/app/Http/Controllers/CinemaController.php @@ -0,0 +1,114 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Support\Facades\DB; +use Illuminate\Http\Request; + +class CinemaController extends Controller +{ + public function cinema() + { + $movies = DB::connection('cinema') + ->table('imdb') + ->select( + 'imdb.id', + 'imdb.imdb_id', + 'imdb.primary_title', + 'imdb.original_title', + 'imdb.start_year', + 'imdb.average_rating', + 'imdb.num_votes', + 'imdb.synopsis', + 'imdb.poster_url', + 'imdb.title_type', + 'imdb.runtime_minutes', + 'imdb.has_people' + ) + ->orderBy('imdb.average_rating', 'desc') + ->orderBy('imdb.num_votes', 'desc') + ->whereNotNull('imdb.primary_title') + ->where('imdb.title_type', 'movie') + ->simplePaginate(12); + + $total = DB::connection('cinema') + ->table('imdb') + ->whereNotNull('primary_title') + ->where('title_type', 'movie') + ->count(); + + return view('cinema', ['movies' => $movies, 'count' => $total]); + } + + public function show($id) + { + $movie = DB::connection('cinema') + ->table('imdb') + ->where('imdb.imdb_id', $id) + ->first(); + + if (! $movie) { + abort(404); + } + + $genres = DB::connection('cinema') + ->table('imdb_genre') + ->join('genre', 'genre.id', '=', 'imdb_genre.genre_id') + ->where('imdb_genre.imdb_id', $movie->id) + ->pluck('genre.name'); + + $casts = DB::connection('cinema') + ->table('who') + ->join('people', 'people.id', '=', 'who.people_id') + ->join('profession', 'profession.id', '=', 'who.profession_id') + ->where('who.imdb_id', $movie->id) + ->select('people.name', 'profession.name as profession') + ->get(); + + $actors = $casts->where('profession', 'actor')->take(8); + $directors = $casts->where('profession', 'director'); + $screenwriters = $casts->where('profession', 'screenwriter')->take(3); + + return view('cinema_show', [ + 'movie' => $movie, + 'genres' => $genres, + 'actors' => $actors, + 'directors' => $directors, + 'screenwriters' => $screenwriters, + ]); + } + + public function search(Request $request) + { + $query = $request->input('q', ''); + + $movies = DB::connection('cinema') + ->table('imdb') + ->select( + 'imdb.id', + 'imdb.imdb_id', + 'imdb.primary_title', + 'imdb.original_title', + 'imdb.start_year', + 'imdb.average_rating', + 'imdb.num_votes', + 'imdb.synopsis', + 'imdb.poster_url', + 'imdb.title_type', + 'imdb.runtime_minutes' + ) + ->whereNotNull('imdb.primary_title') + ->where('imdb.title_type', 'movie') + ->where(function ($q) use ($query) { + $q->where('imdb.primary_title', 'like', '%' . $query . '%') + ->orWhere('imdb.original_title', 'like', '%' . $query . '%') + ->orWhere('imdb.synopsis', 'like', '%' . $query . '%'); + }) + ->orderBy('imdb.average_rating', 'desc') + ->simplePaginate(12); + + $total = $movies->total(); + + return view('cinema', ['movies' => $movies, 'count' => $total, 'search_query' => $query]); + } +} |
