2013-07-29 1 views
1

Итак, я посмотрел на Doctrine, Propel и Eloquent, и пока они не хотят рассматривать существование средней таблицы, которая имеет гибридную связь между двумя другими таблицами.ORM не способны справиться с комбинационными отношениями - poopy

http://s14.postimg.org/uoo8xt1sx/Screen_Shot_2013_07_29_at_2_50_47_PM.png

person имеет один ко многим отношения с personVehicle и это способствует первичному ключу personId.

vehicle имеет один на один отношения с personVehicle и это способствует первичному ключу vehicleId.

До сих пор особые отношения все ORM, я посмотрел на ручку

  1. один к одному
  2. один ко многим
  3. многие ко многим

Но не любые два или или более комбинаций , Это правильно? Каков наилучший способ вставить в эти отношения (в лицо, автомобиль и соответствующий идентификатор в personalVehicle) с ORM или альтернативным, если он доступен?

ответ

0

Отношения, которые вы описываете, являются де-факто отношениями «Один ко многим» между одним пользователем и многими транспортными средствами.

Если существует связь «один к одному» между «транспортным средством» и «personVehicle», то «personVehicle» по существу является расширением таблицы «автомобиль». Если база данных была полностью заполнена, в обеих этих таблицах должно быть одинаковое количество строк с одной строкой для каждого транспортного средства. Вы можете комбинировать таблицы «транспортное средство» и «personVehicle» без двусмысленности данных или отношений, используя общий носитель в качестве индекса.

В любом случае, если вы действительно хотите создать свои таблицы таким образом, вы могли бы просто создать три модели и иметь personVehicle быть своей собственностью. Делайте то, как вы говорите,

vehicle- (один к одному) -personVehicle- (многие к одному) -user

1

Это старый вопрос, но я наткнулся на него и думал, что я хотел бы добавить мои 2 цента ...

Хотя я не знаю точную область ваших объектов, возможно, что транспортное средство и personVehicle являются хорошим кандидатом на наследование таблицы. Это то, что предлагает Doctrine: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

Фокус в том, что модель автомобиля (таблица) содержит все обычные поля, относящиеся к автомобилям, но является абстрактной и никогда не используется. Используются только детские модели - в данном случае personVehicle. Тогда вы можете легко добавить другие детские классы транспортных средств.

 Смежные вопросы

  • Нет связанных вопросов^_^