2013-08-05 8 views
0

У меня есть 2 модели: заказ и виджет. Виджет - это уникальный элемент, который может существовать только в одном порядке. Я мог бы представить это с помощью ownTo, а именно: Wiget принадлежит ордеру, а виджет будет содержать поле order_id. Или, я мог бы hasAndBelongsToMany с таблицей join.CakePHP Zero to One Relationship

Поскольку виджет существует на своем собственном и позже связан с порядком, «нормально ли» для поля order_id на виджете оставаться пустым? Для меня это кажется «нечистым» по сравнению с таблицей объединений, которая связывает ее с Орденом в будущем. Мне также необходимо получить виджеты, связанные с Ордером, и те, которые не являются.

Каков наилучший способ установить это?

ответ

1

Я бы использовал belongsTo с внешним ключом, который может быть пустым. Это может показаться нечистым, но я считаю его лучшей альтернативой, рядом с HABTM, если вы заявили, что виджет может существовать только в одном Ордене. Наличие таблицы соединений только для того, чтобы связать одну запись с другой, кажется довольно беспорядочным.

Если вам нужны Widgets, у которых есть ордеры, а те, которые этого не делают, просто сделайте фильтр с order_id = null. Или, если вы нажмете с Containable Behavior, если у виджета есть order_id null, тогда запись просто не будет восстановлена.