2015-05-03 34 views
1

我對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版本(?我認爲,沒有記錄)創建的,現在我使用最新的可用版本。

回答

1

我要表明,在這第二行是你的問題:

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") 

您的用戶表中有一個關鍵foereign到relatioship本身,所以自has_many realtionship與本身被稱爲company時, belongs_to realtionship被命名爲company_2

我的猜測是,以前的版本做了類似的事情,但程序員編輯生成的文件,將company_2更改爲其他名稱。

我會猜測破碎的代碼是抱怨失蹤的關係。這將是您需要使用的名稱。

但是,爲什麼重新生成DBIC的東西,而不是編輯它呢? 它沒有致力於源代碼控制嗎?

+0

感謝您的回覆。這與自己的關係可能是問題,也是我想要的。裝載程序沒有顯示錯誤,當它試圖覆蓋原始的schmema時,所以我的猜測是,程序員沒有編輯生成的代碼(如果他有,校驗和檢查將失敗?!)。我認爲,再生是去更新而不是編輯的方式。源控制未附加(尚)。爲了更新模式,我現在嘗試熟悉DBIx :: Class :: DeploymentHandler,因爲似乎我必須深入研究。 –

+0

在進行任何(更多)更改之前,請將您的代碼庫檢入到源代碼控制中。 –

相關問題