Perl / DBIx :: Class :: Schema :: Loader后缀_2以复制关系名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl / DBIx :: Class :: Schema :: Loader后缀_2以复制关系名称相关的知识,希望对你有一定的参考价值。
我对Perl很新,并且要维护这个Catalyst项目。有一个mysql数据库,通过DBIx连接,我需要做一些更改。在我找到的项目文档中,如何创建模型:
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”后缀。)
使用此模型,所有现有代码都会中断,因为它无法再找到某些方法。坦率地说,我真的不知道,要搜索什么,所以我希望有人可以帮助我。
在加载器中是否有任何选项,我需要设置/取消设置,或者它可能甚至不需要对加载器执行任何操作?
编辑:到目前为止我唯一找到的{rel} _2表示法是在ResultSet class中说:
如果两次提供相同的连接,则它将别名为{rel} _2(类似地第三次)。
我不知道,如果这是我的问题的根源以及如何规避它。
有一件事,我在原来的问题中没有:工作模型是用2012年的DBIx版本创建的(我认为,没有记录),我现在使用最新的版本。
我要建议第二行是你的问题:
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")
你的用户表与自身有一个关键的关键关系,所以因为它的qazxsw poi关系称为qazxsw poi,所以qazxsw poi realtionship命名为has_many
。
我的猜测是,之前的版本做了类似的事情,但程序员编辑了生成的文件,将company
更改为其他名称。
我猜想破碎的代码抱怨缺少关系。这将是您需要使用的名称。
但是你为什么要重新生成DBIC的东西而不是juts编辑呢?它不是致力于源代码控制吗?
我通过belongs_to
在生成器脚本调用中重新映射了错误的名称来修复命名问题。只有两个有问题的连接,所以努力对我来说已经足够了。我知道这不是一般解决方案,但也许它对某人有所帮助。
我像这样使用company_2
:
company_2
以上是关于Perl / DBIx :: Class :: Schema :: Loader后缀_2以复制关系名称的主要内容,如果未能解决你的问题,请参考以下文章
Perl DBIx::Class - 是不是可以使用列属性为插入提供默认值