2011-01-31 15 views
6

Używam Catalyst i DBIx::Class::Schema::Loader utworzyć mój model w Catalyst tak:Jak zapobiec DBIx :: Class :: Schema :: Loader z automatycznego dodawania InflateColumn :: DateTime w Catalyst?

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema create=static overwrite_modifications=1 components=EncodedColumn dbi:mysql:mydb mydb pass 

Niestety ładowarka automatycznie ustawia InflateColumn::DateTime jako domyślny składnik, którego nie chcę. Chcę surową wartość z bazy danych.

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

Czy ktoś może mi powiedzieć, jak temu zapobiec?

Odpowiedz

6

Mężczyzna, to denerwujące. Wygląda na to, że nie można dostać tego, co chcesz.

_build_loader_components w Catalyst::Helper::Model::DBIC::Schema dodaje go, chyba że nie masz przestrzeni nazw ani przestrzeni nazw zestawu wyników. Przesuwa na to Twoją dodatkową listę component=.

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

Więc OPCJE-

  1. File a bug.
  2. Zrób to z dbicdump.

ta powinna być co wanted-

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

a potem po prostu zwykły model, aby owinąć it-

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

Update: Wyjął preserve_case jak Twój przykład nie używać go i chciałbym wspomnieć ze względu na najlepsze praktyki, że hasło nie powinno znajdować się w modelu lub klasach schematu. Powinien być w konfiguracji i jeśli używasz czegoś, co na to pozwala, jak na przykład mysql, powinien być skonfigurowany do odczytu z pliku konfiguracji specyficznej dla ograniczonej uprawnień.

+1

Cześć Ashley, tego się obawiałem, znalazłem również kawałek kodu pomocnika, ale nie byłam pewna, czy jest na to sposób. Pójdę na ścieżkę dbicdump. Właśnie napisałem mały perl helper, który ręcznie zrzuca schemat. Nieźle. Dziękuję za rozpatrzenie tego. –