PHP Yii关系:电影&电影院和电影院放映时间

时间:2012-04-07 16:02:51

标签: php mysql yii

我在制作电影&电影放映时间指南。

我有showtime表(照片#1),我有时间表(照片#2)

我需要在电影页面中显示带有放映时间的电影院列表

影院名称:时间1 - 时间2 - 时间3

Grand Cinema:** 00:18 - 00:20 - 00:22 .... ets

我的代码不起作用..我可以写什么来在视图文件中显示

  

错误:活动记录类“movie”中的“cinemas”关系不是   正确指定:连接表“{{showtime}}”中给出   在数据库中找不到外键。

电影模型有关系:

'cinemas' => array(self::MANY_MANY, 'Cinema', '{{showtime}}(movie_id, cinema_id)')

影院模型有关系:

'times' => array(self::MANY_MANY, 'Time', '{{showtime}}(cinema_id, time_id)')

影院模型应该有命名范围:

public function times_by_movie($movie_id) {
    return $this->with(
        array(
            'times'=>array(
                'condition'=>'`movie_id` = :movie_id',
                'params' => array(':movie_id'=>$movie_id),
                'joinType' => 'INNER JOIN'
            )
        )
    );
}

MoviesController>的actionView

public function actionView($id) {
    $movie = Movie::model()->with(
        array(
            'cinemas'=>array(
                'scopes'=>array(
                    'times_by_movie'=>$id
                )
            )
        )
    )->findByPk($id);
    if (!$movie)
      throw new CHttpException(404, 'Movie not found.');

}

enter image description here enter image description here

2 个答案:

答案 0 :(得分:1)

因此,您有模型MovieShowtimeTime。 您的Movie模型有关系:

'cinemas' => array(self::MANY_MANY, 'Cinema', '{{showtime}}(movie_id, cinema_id)')

您的Cinema模型有关系:

'times' => array(self::MANY_MANY, 'Time', '{{showtime}}(cinema_id, time_id)')

此外,您的Cinema模型应具有命名范围:

public function times_by_movie($movie_id) {
    return $this->with(
        array(
            'times'=>array(
                'condition'=>'`movie_id` = :movie_id',
                'params' => array(':movie_id'=>$movie_id),
                'joinType' => 'INNER JOIN'
            )
        )
    );
}

MoviesController - > actionView中您应该:

public function actionView($id) {
    $movie = Movie::model()->with(
        array(
            'cinemas'=>array(
                'scopes'=>array(
                    'times_by_movie'=>$id
                )
            )
        )
    )->findByPk($id);
    if (!$movie)
      throw new CHttpException(404, 'Movie not found.');

}

像这样的东西。应该进行测试。

答案 1 :(得分:1)

你必须为MANY_MANY关系建立一个关联表