CakePHP: HABTM + 1 - PullRequest
       48

CakePHP: HABTM + 1

0 голосов
/ 29 марта 2011

У меня есть сайт, который собирает все эпизоды с tv.com из определенных серий.

Таким образом, в моей базе данных есть таблица пользователей, таблица показа, таблица эпизодов, таблица Show_User (чтобы связать шоу спользователи, HABTM), таблица Episode_Show (чтобы связать эпизоды с шоу, HABTM), таблица Episode_User (чтобы связать эпизоды с шоу, только как способ пометить их как «просмотренные»).

Теперь я хочудобавить способ пометки эпизода как «скачанного».

Итак, на данный момент таблица Episode_User имеет два поля, Episode_Id и User_Id.Должен ли я создать новую таблицу полностью для этого?Или просто добавить поле в таблицу Episode_User?

Я использую автоматические функции CakePHP и не хочу его ломать.Но если мне нужно, я должен ...

Спасибо за любой совет.

1 Ответ

0 голосов
/ 30 марта 2011

Я не понимаю, почему вы хотите создать новую таблицу для эпизодов, загруженных пользователем.Для меня было бы наиболее разумно изменить таблицу Episode_User так, чтобы она содержала поле для отслеживаемых и поле для загружаемых, поскольку все они относятся к одной и той же паре сущностей, пользователей и эпизодов.

Однако любойВ то время, когда я таким образом хранил информацию об отношениях между двумя таблицами, я обнаружил, что независимо от используемой платформы ORM неизбежно усложняется, но я не думаю, что есть какой-то путь вокруг этого.

С CakePHP для обработки подобных сложных ситуаций, читайте о поведении модели, Containable.Это не очень хорошо задокументировано в книге CakePHP, но действительно очень полезно в ситуации, когда вам нужно использовать поля в Episode_User, например, если вам нужно найти всех пользователей, которые смотрели определенный эпизод, но не загружалиit.

Кроме того, во время чтения вашего поста мне пришло в голову, что вы могли бы сделать вашу модель данных более простой, имея отношение hasMany между шоу и эпизодами.Эпизод никогда не будет принадлежать более чем одному шоу, поэтому ваша таблица эпизодов может просто иметь другое поле, show_id, которое связано с таблицей шоу, и вам даже не понадобится таблица Episode_Show.

...