【问题标题】:Retrieving a Movie's Showtimes grouped by Theater: Movie->Showtimes<-Theater in CakePHP检索按剧院分组的电影放映时间:Movie->Showtimes<-CakePHP 中的剧院
【发布时间】:2011-07-07 07:34:41
【问题描述】:

当您观看电影时,我想显示剧院组织的放映时间(movie_times 表)。我可以很好地获取所有数据,但它会像这样返回每个 MovieTime 的剧院数据:

[0] =>
    [Movie] =>
        [name] => Herp de Derp
    [MovieTime] =>
        [0] =>
            [datetime] => 2011-07-06 18:30:00
            [Theater] =>
                [name] => Awesome Cinemas
                [address] => 1234 Street Ln
        [1] =>
            [datetime] => 2011-07-06 20:30:00
            [Theater] =>
                [name] => Awesome Cinemas
                [address] => 1234 Street Ln
        [2] =>
            [datetime] => 2011-07-06 20:30:00
            [Theater] =>
                [name] => Crappy Movies 10
                [address] => 678 Avenue St

您可以想象,剧院数据存在大量重复。

有没有办法我可以获得相同的数据,而是像这样获取与其中的电影时间分组的剧院数据?:

[0] =>
    [Movie] =>
        [name] => Herp de Derp
    [Theater] =>
        [0] =>
            [name] => Awesome Cinemas
            [address] => 1234 Street Ln
            [MovieTime] =>
                [0] =>
                    [datetime] => 2011-07-06 18:30:00
                [1] =>
                    [datetime] => 2011-07-06 20:30:00
                [2] =>
                    [datetime] => 2011-07-06 22:30:00

        [1] =>
            [name] => Awesome Cinemas
            [address] => 1234 Street Ln

我的关联如下:

Movie hasMany MovieTime
MovieTime belongsTo Movie

Theater hasMany MovieTime
MovieTime belongsTo Theater

如您所见,电影和剧院之间没有直接联系 - 它使用 MovieTime 作为中间人。这些关联是合乎逻辑的(至少对我而言)——但如果我必须将它们更改为不同的(但也是合乎逻辑的)设置,我当然愿意听。

我目前正在使用它来获取我的数据:

        $data = $this->find("first", array(
            'conditions' => array(
                array('Movie.slug' => $slug)
            ),
            'fields' => array('id', 'name', 'slug', 'url', 'runtime'),
            'contain' => array(
                'MovieTime' => array(
                    'fields' => array('datetime', 'screen_number'),
                    'Theater' => array(
                        'fields' => array('id', 'slug', 'name', 'address', 'phone'),
                        'City' => array(
                            'fields' => array('id', 'name', 'st')
                        ),
                    ),
                ),
            ),
        )
    );

【问题讨论】:

    标签: mysql cakephp associations cakephp-1.3


    【解决方案1】:

    试试 GROUP BY。您只需将 'group' => 'Put here de Model.Id' 添加到您的查找中。

    试试这个:

    $data = $this->find("first", array(
                'conditions' => array(
                    array('Movie.slug' => $slug)
                ),
                'fields' => array('id', 'name', 'slug', 'url', 'runtime'),
                'contain' => array(
                    'MovieTime' => array(
                        'fields' => array('datetime', 'screen_number'),
                        'group' => 'Theater.id',
                        'Theater' => array(
                            'fields' => array('id', 'slug', 'name', 'address', 'phone'),
                        'City' => array(
                            'fields' => array('id', 'name', 'st')
                        ),
                        ),
                    ),
                ),
            ),
        );
    

    欲了解更多信息,请查看以下两个链接:

    【讨论】:

    • 当我这样做时,我得到:“字段列表”中的未知列“Theater.id”
    • Theater 是我的型号名称,id 是主键。我不想按 MovieTime.id 分组 - 这与我想要的相反。
    • 我改变我的第一个答案,试试吧。
    • 错误:“字段列表”中的未知列“Theater.group”
    • 再回到这个:'group statement'中的未知列'Theater.id'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多