我正在使用Catalyst和DBIx::Class::Schema::Loader在Catalyst中创建模型,如下所示:
script/myapp_create.pl model DB DBIC::Schema MyApp::Schema create=static overwrite_modifications=1 components=EncodedColumn dbi:mysql:mydb mydb pass
不幸的是,加载程序会自动将
InflateColumn::DateTime
设置为默认组件,我不希望这样做。我想要来自数据库的原始值。__PACKAGE__->load_components("InflateColumn::DateTime", "EncodedColumn");
谁能告诉我如何防止这种情况?
最佳答案
伙计,那很烦人。看起来无法按原样获得所需的东西。
除非您没有 namespace 和结果集 namespace ,否则Catalyst::Helper::Model::DBIC::Schema中的_build_loader_components
会添加它。它将您的额外component=
列表推送到该列表上。
my @components = $self->old_schema && (not $use_namespaces) ? ()
: ('InflateColumn::DateTime');
因此,选项–
这应该是您想要的–
dbicdump -o dump_directory=./lib \
-o components='["EncodedColumn"]' \
-o use_namespaces=1 \
-o overwrite_modifications=1 \
MyApp::Schema dbi:mysql:foo user pass
然后只是一个简单的模型来包装它-
script/myapp_create.pl model DB DBIC::Schema MyApp::Schema
更新:删除了
preserve_case
,因为您的示例未使用它,并且出于最佳实践的目的,我想提及密码不应位于模型或架构类中。它应该位于config中,并且如果您使用允许它的东西(如mysql),则应将其配置为从特权受限的DB特定配置文件中读取。关于perl - 如何防止DBIx::Class::Schema::Loader在Catalyst中自动添加InflateColumn::DateTime?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4850284/