我對Perl很新,並且得到了這個Catalyst項目來維護。有一個MySQL數據庫,通過DBIx連接,我需要做一些改變。在我發現這個項目的文件,如何創建模型:Perl/DBIx :: Class :: Schema :: Loader後綴_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創建行的原始模型的關係。 PM「:
__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" },
);
(注意在belongs_to的包「_2」後綴。)
在這種模式下,所有的現有代碼的假期,因爲它無法找到一些方法了。坦率地說,我真的不知道要尋找什麼,所以我希望這裏有人能幫助我。
在loader中是否有任何選項,我需要設置/取消設置,或者它可能甚至不需要對加載程序進行任何操作?
編輯: 我找到了{相對}唯一_2符號至今在ResultSet class那裏說:
如果相同的連接提供了兩次,它將被別名到{rel} _2(同樣是第三次)。
我不知道,如果這是我的問題的根源以及如何規避它。
有一件事,我沒有在我原來的問題中:工作模型是用2012年的DBIx版本(?我認爲,沒有記錄)創建的,現在我使用最新的可用版本。
感謝您的回覆。這與自己的關係可能是問題,也是我想要的。裝載程序沒有顯示錯誤,當它試圖覆蓋原始的schmema時,所以我的猜測是,程序員沒有編輯生成的代碼(如果他有,校驗和檢查將失敗?!)。我認爲,再生是去更新而不是編輯的方式。源控制未附加(尚)。爲了更新模式,我現在嘗試熟悉DBIx :: Class :: DeploymentHandler,因爲似乎我必須深入研究。 –
在進行任何(更多)更改之前,請將您的代碼庫檢入到源代碼控制中。 –