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. dvicdumpでそれを行います。

これはあなたが望んでいたものでなければなりません–</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 に答える