Почему DBIx :: Class не создает методы доступа «многие ко многим»? - PullRequest
4 голосов
/ 30 марта 2011

При создании схемы из базы данных отношения между многими таблицами не создаются.

Это принципиальная проблема?

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

Ответы [ 2 ]

5 голосов
/ 02 апреля 2011

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

Вкл.с другой стороны, это означает, что, если реальные отношения обнаружены правильно, должно быть просто добавить автоматически отношения «многие ко многим»: во-первых, ищите таблицы, которые имеют два или более отношений has_many.Затем для каждой пары таких отношений создайте мост отношений «многие ко многим».(Конечно, можно надеяться, что DBIx :: Class сделает это сам.)

2 голосов
/ 06 апреля 2011

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

create table category (
    id primary key,
    ...
);

create table sub_category (
    id primary key,
    category references category(id),
    ...
);

/* EDIT:
    This is the table that could be regarded as many_to_many
    by an automated system */
create table product (
    id primary key,
    category references category(id),
    sub_category references sub_category(id),
    ...
);

Что-то может быть построено таким образом для простоты использования, без необходимости объединения нескольких таблиц в базе данных на веб-сайте, особенно если учитывать скорость. Для части кода было бы трудно однозначно сказать, что это «не много-много-много-много», в то время как разработчик должен иметь возможность легко это выяснить и добавить в строку много-много-мало под контрольной суммой.

Я считаю, что схема DBIX :: Class выводит хорошую отправную точку, и немного больше, особенно при работе с автоматической нумерацией в базах данных не-MySQL, между прочим. Мне часто нужно модифицировать выше, чем «Не изменять выше этой строки» (хотя many_to_many, конечно, может пойти ниже этой контрольной суммы, конечно.

...