2013-07-15 3 views
0

У меня есть отношение, представленное в MySQL, которыйCakePHP: Использование таблицы объединения в отношениях, не HABTM

Classified belongsTo Category 
Category hasMany Classifieds 

Раньше я имел Classified.category_id множество, но некоторые объявления не имеют категории, и многие категории делают нет рекламы. Это соотношение необязательно.

Я нормализовал базу данных для представления базы данных в третьей таблице, category_classifieds.

categories_classifieds 
---- 
classified_id (primary, not null) 
category_id (not null) 

Причина этого была нормализована таким образом, чтобы избежать нулевых значений, а также

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

Заранее благодарим за понимание.

Вот гусиные ноги обозначения ER диаграмма тока и предложенные схемы: http://i.stack.imgur.com/1BBVV.jpg

ответ

0

Это является hasAndBelongsToMany отношением.

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

+0

Не может быть проблемы с совпадениями мощности между CakePHP и MySQL? MySQL не будет терпеть нарушение ключа, но я не хочу, чтобы конечные пользователи отображали проблемы с ошибками нарушения ключа ... –

+0

Это основное отношение к пирогу, поэтому почти все его используют, и он отлично работает. Невозможно выявить какие-либо ключевые нарушения, если вы правильно настроите свои модели и базы данных, просто следуйте соглашениям и здравому смыслу. Например, если вы удаляете «Категория», очевидно, что все соответствующие строки из таблицы взаимосвязей тоже должны идти. Это может быть сделано Cake в обратном вызове 'Category :: beforeDelete()' или MySQL (вам нужно установить 'CASCADE', если я правильно помню) или и то, и другое (так что если вы пропустите что-то в бизнес-логике, DB позаботится его). Я лично позволил ему работать с БД. – user221931