Когда вы просматриваете фильм, я хочу показать расписание сеансов (таблица 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')
),
),
),
),
)
);