2016-10-12 43 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')); 
}