2016-10-12 68 views
3

我有一個3-way關係查詢。我想爲一部也有電影院的電影開個會。Laravel檢索多行數據

我有權訪問電影ID作爲$ id傳遞給參數。我想找到有電影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); 
} 

正如你可以看到我真的不知道我該如何使用我的$查詢(檢索所有的會話與電影ID)來檢索該會話的所有行有那個電影ID。

我已經使用$ 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傳入參數爲$ 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

如果你想在電影的電影院內的所有會話,它可以也可以通過提取會話和('cinema')來完成。讓我知道,我可以更新答案。 – Mosufy

0

如果你有movie id,有一個movie_idcinemas表,你可以使用這個查詢檢索電影院:

public function ticketpage($id) 
{ 
    $cinemas = Cinema::where('movie_id',$id)->get(); 
    return view('movies.ticketpage.index',compact('cinemas')); 
}