我正在使用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");
谁能告诉我如何防止这种情况?
答案 0 :(得分:6)
男人,这很烦人。看起来不可能得到你想要的东西。
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特定配置文件中读取。
答案 1 :(得分:-1)
我做到了,它奏效了:
script/myapp_create.pl model DB DBIC::Schema MyApp::Schema \
create=static components=TimeStamp dbi:SQLite:myapp.db \
on_connect_do="PRAGMA foreign_keys = ON" \
overwrite_modifications=1