我正在使用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

不幸的是,加载程序会自动将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');

因此,选项–
  • File a bug
  • dbicdump来做。

  • 这应该是您想要的–
    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/

    10-09 23:23