Получение Сеансов Фильма, сгруппированных Театром: Кино-> Сеансы <-Theater в CakePHP - PullRequest
0 голосов
/ 07 июля 2011

Когда вы просматриваете фильм, я хочу показать расписание сеансов (таблица movie_times), организованное Theatre. Я могу получить все данные просто отлично, но он возвращает данные театра с КАЖДЫМ 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

Как вы можете себе представить, есть тонна дублирования с данными театра.

Есть ли способ, которым я могу получить эти же данные, но вместо этого получить данные Театра, сгруппированные с этим в виде movie_times?

[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')
                        ),
                    ),
                ),
            ),
        )
    );

1 Ответ

0 голосов
/ 08 июля 2011

Попробуйте GROUP BY. Вам просто нужно добавить 'group' => 'Поместите здесь 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')
                    ),
                    ),
                ),
            ),
        ),
    );

Для получения дополнительной информации, проверьте эти две ссылки:

...