如何防止DBIx :: Class :: Schema :: Loader在Catalyst中自动添加InflateColumn :: DateTime?

Rob*_*man 6 perl catalyst dbix-class

我正在使用CatalystDBIx :: 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
Run Code Online (Sandbox Code Playgroud)

不幸的是,加载器自动设置InflateColumn::DateTime为默认组件,我不想要.我想要数据库中的原始值.

__PACKAGE__->load_components("InflateColumn::DateTime", "EncodedColumn");
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何防止这种情况?

Ash*_*ley 6

伙计,这很烦人.看起来不可能得到你想要的东西.

_build_loader_componentsCatalyst :: Helper :: Model :: DBIC :: Schema中添加它,除非您没有名称空间且没有结果集名称空间.它会将您的额外component=列表推送到该列表上.

my @components = $self->old_schema && (not $use_namespaces) ? ()
    : ('InflateColumn::DateTime');                                 
Run Code Online (Sandbox Code Playgroud)

所以,选项 -

  1. 提交错误.
  2. dbicdump做吧.

这应该是你想要的 -

dbicdump -o dump_directory=./lib \
    -o components='["EncodedColumn"]' \
    -o use_namespaces=1 \
    -o overwrite_modifications=1 \
    MyApp::Schema dbi:mysql:foo user pass
Run Code Online (Sandbox Code Playgroud)

然后只是简单的模型来包装它 -

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema
Run Code Online (Sandbox Code Playgroud)

更新:preserve_case因为您的示例没有使用它,我想提及最佳实践,密码不应该在模型或模式类中.它应该在config中,如果你正在使用允许它的东西,比如mysql,它应该被配置为从特权限制的DB特定配置文件中读取.