6

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

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

4

2 回答 2

6

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

_build_loader_componentsCatalyst::Helper::Model::DBIC::Schema中添加它,除非您没有命名空间和结果集命名空间。它将您的额外component=列表推到上面。

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

所以,选项——</p>

  1. 提交错误
  2. dbicdump 来做

这应该是你想要的——</p>

dbicdump -o dump_directory=./lib \
    -o components='["EncodedColumn"]' \
    -o use_namespaces=1 \
    -o overwrite_modifications=1 \
    MyApp::Schema dbi:mysql:foo user pass

然后只是简单的模型来包装它-</p>

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema

更新:preserve_case因为您的示例没有使用它,所以我想提一下,为了最佳实践,密码不应该在模型或模式类中。它应该在配置中,如果您使用允许它的东西,例如 mysql,则应该将其配置为从权限受限的 DB 特定配置文件中读取。

于 2011-02-01T04:16:25.760 回答
-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
于 2018-12-16T21:01:52.537 回答