2016-10-12 3 views
3

У меня есть запрос с тремя отношениями. Я хочу получить сеанс для фильма, в котором также есть кинотеатр.Laravel получение нескольких строк данных

У меня есть доступ к идентификатору фильма, когда $ id передан в параметр. Я хочу найти кинотеатры, у которых есть этот идентификатор фильма.

Вот мой контроллер:

public function ticketpage($id) 
{ 
    $movie = Movie::find($id); 
    $cinemas = Cinema::all(); 
    $sessions = Session::all(); 
    $query = Session::where('movie_id', "$id")->get(); 
    $count = count($query)-1; 


    $cinemaId = $query[$count]['cinema_id']; 
    $cinemaRow = Cinema::where('id', "$cinemaId")->get(); 

    return view('movies/ticketpage/index') 
     ->with('cinemas', $cinemas) 
     ->with('sessions', $sessions) 
     ->with('movie', $movie) 
     ->with('cinemaRow', $cinemaRow); 
} 

Как вы можете видеть, что я действительно не знаю, как я могу использовать $ запрос (получение всех сеансов с этим идентификатором фильма), чтобы получить все строки этой сессии которые имеют этот идентификатор кинотеатра.

Я использовал $ query [count] ['cinema_id], но он вернет только одно значение, значение последней строки. Я хочу, чтобы он возвращал значения всех строк. Я пробовал использовать цикл for, но не имел большого успеха.

Благодарим за помощь!

ответ

0

попробовать это:

public function ticketpage($id) 
{ 
$movie = Movie::find($id); 
$cinemas = Cinema::all(); 
$sessions = Session::all(); 
$query = Session::select('cinema_id')->where('movie_id', $id)->get(); 
//$count = count($query)-1; 


//$cinemaId = $query[$count]['cinema_id']; 
//$cinemaRow = Cinema::where('id', $cinemaId)->get(); 
$cinemaRow = Cinema::whereIn('id', $query)->get(); 

return view('movies/ticketpage/index', compact('cinemas', 'sessions', 'movie', 'cinemaRow')); 

// No need for all the 'withs' 
//return view('movies/ticketpage/index') 
// ->with('cinemas', $cinemas) 
// ->with('sessions', $sessions) 
// ->with('movie', $movie) 
// ->with('cinemaRow', $cinemaRow); 
} 
0

Замените эти два в своем коде и попробуйте это должно работать:

$query = Session::select('cinema_id')->whereMovie_id($id)->get(); 
$cinemaWithSession = Cinema::whereId($query)->get(); 
0

Прежде всего, я хотел бы предположить следующую схему и отношения создаются.

| Movie | Cinema | Session | 
| ----- | ------ | --------- | 
| id | id  | id  | 
|  |  | cinema_id | 
|  |  | movie_id | 

Это, как я достану кинотеатры, которые играют в кино на ИТС movie_id на основе Вашего заявления:

У меня есть доступ к кино ид как $ Id прошли в параметр. Я хочу найти кинотеатры, у которых есть этот идентификатор фильма..

public function ticketpage($id) 
{ 
    // Get all Cinema which has the Session with the Movie.id 
    $cinemas = Cinema::whereHas('sessions', function ($query) use ($id) { 
     $query->where('movie_id', $movie_id); 
    })->get(); 

    return view('movies/ticketpage/index', [ 
     'cinemas' => $cinemas 
    ]); 
} 
+0

Если вы хотите, чтобы все сеансы фильма внутри кино, он может также можно сделать, извлекая сеанс и вместо этого («кино»). Дайте мне знать, и я могу обновить ответ. – Mosufy

0

Если у вас есть movie id и есть movie_id столбец в cinemas таблице вы можете получить кинотеатры, используя этот запрос:

public function ticketpage($id) 
{ 
    $cinemas = Cinema::where('movie_id',$id)->get(); 
    return view('movies.ticketpage.index',compact('cinemas')); 
} 
Смежные вопросы