Я довольно новичок в Perl и получил этот проект Catalyst для поддержки. Существует база данных MySQL, которая подключается через DBIx, и мне нужно сделать некоторые изменения. В документации проекта я нашел, как создается модель:Perl/DBIx :: Class :: Schema :: Суффикеры загрузчика _2 для дублирования имени отношения
dev:~# script/prj_create.pl
model PrjDB DBIC::Schema
prj::Schema::PrjDB
create=static
preserve_case=1
moniker_map='sub {return $_[0];}'
col_accessor_map='sub {return $_[0];}'
inflect_plural='sub {return $_[0];}'
inflect_singular='sub {return $_[0];}'
exclude='^view_'
components=TimeStamp,PassphraseColumn,DynamicDefault
use_moose=1
dbi:mysql:prj root ********
В базе данных есть отношения, как
company_user belongs_to company (foreign key)
company_user has_many company_user ("last_changed_by_user")
company_user has_many company (secondary relationship via "last_changed_by_user")
Оригинальная модель, которую я получил имеет следующие строки, созданные в «company_user. вечера ":
__PACKAGE__->has_many(
"company",
"prj::Schema::PrjDB::Result::company",
{ "foreign.last_changed_by" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->belongs_to(
"company",
"prj::Schema::PrjDB::Result::company",
{ id => "company" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
Если теперь я пытаюсь воссоздать модель я получаю:
__PACKAGE__->has_many(
"company",
"prj::Schema::PrjDB::Result::company",
{ "foreign.last_changed_by" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->belongs_to(
"company_2",
"prj::Schema::PrjDB::Result::company",
{ id => "company" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
(Обратите внимание на «_2» суффикс в пакете belongs_to.)
С помощью этой модели, все существующие код брейки, поскольку он не может найти некоторые методы больше. Я откровенно не знаю, что искать, поэтому я надеялся, что кто-то здесь может мне помочь.
Есть ли какой-либо вариант в загрузчике, который мне нужно установить/отключить, или это может быть что-то, что даже не нужно делать с загрузчиком?
Edit: Единственное, что я нашел для {отн} _2 обозначения до сих пор находится в ResultSet class, где он говорит:
Если же присоединиться поставляется в два раза, это будет совмещенным to {rel} _2 (и аналогично в третий раз).
Я не знаю, если это источник моей проблемы и как ее обойти.
Одна вещь, которой у меня не было в моем первоначальном вопросе: рабочая модель была создана с версией DBIx 2012 года («Я думаю, не документирована»), и теперь я использую новейшую доступную.
Спасибо за ответ. То, что отношение has_many к себе может быть проблемой, - это то, что я тоже.Загрузчик не обнаружил ошибок, когда попытался перезаписать оригинальную schmema, поэтому я предполагал, что программист не отредактировал сгенерированный код (если бы он был, проверка контрольной суммы не сработала ?!). Я думал, что регенерация - это путь к обновлению, а не редактированию. Контроль источника не включен (пока). Для обновления схемы я попытаюсь теперь ознакомиться с DBIx :: Class :: DeploymentHandler, так как мне кажется, что мне все равно нужно идти глубже. –
Проверьте свою базу кода в исходном коде, прежде чем вносить какие-либо изменения. –