Laravel检索多行数据

时间:2016-10-12 01:26:21

标签: php laravel controller

我有3方式关系查询。我想为一部还有电影的电影开个会议。

我可以访问电影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);
}

正如您所看到的,我并不确定如何使用我的$ query(检索具有该影片ID的所有会话)来检索具有该影院ID的该会话的所有行。

我使用了$ query [count] [' cinema_id],但它只会返回一个值,即最后一行的值。我希望它返回所有行的值。我尝试使用for循环,但没有取得多大成功。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

首先,我假设正在设置以下架构和关系。

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

这是我根据您的陈述获取由movie_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
    ]);
}

答案 1 :(得分: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);
}

答案 2 :(得分:0)

在代码中替换这两个,并尝试它应该工作:

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

答案 3 :(得分:0)

如果您拥有movie idmovie_id表格中有cinemas列,则可以使用此查询检索影院:

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