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

时间:2011-01-31 11:22:20

标签: 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

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

__PACKAGE__->load_components("InflateColumn::DateTime", "EncodedColumn");

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

2 个答案:

答案 0 :(得分:6)

男人,这很烦人。看起来不可能得到你想要的东西。

Catalyst::Helper::Model::DBIC::Schema中的

_build_loader_components会添加它,除非您没有名称空间且没有结果集名称空间。它会将您的额外component=列表推送到该列表。

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

所以,选项 -

  1. File a bug
  2. 使用dbicdump
  3. 这应该是你想要的 -

    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
相关问题