2011-01-31 1 views
6

J'utilise Catalyst et DBIx::Class::Schema::Loader pour créer mon modèle Catalyst comme ceci:Comment puis-je empêcher DBIx :: Class :: Schema :: Loader d'ajouter automatiquement InflateColumn :: DateTime dans Catalyst?

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

Malheureusement, le chargeur établit automatiquement InflateColumn::DateTime en tant que composant par défaut, que je ne veux pas. Je veux la valeur brute de la base de données.

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

Quelqu'un peut-il me dire comment éviter cela?

Répondre

6

L'homme, c'est ennuyeux. On dirait qu'il n'est pas possible d'obtenir ce que vous voulez comme il est.

_build_loader_components dans Catalyst::Helper::Model::DBIC::Schema ajoute à moins que vous n'avez pas d'espaces de noms et aucun espace de noms resultset. Il pousse votre liste supplémentaire component= sur cela.

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

Ainsi, options-

  1. File a bug.
  2. Faites-le avec dbicdump.

Cela devrait être ce que vous wanted-

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

Et puis juste le modèle simple pour envelopper it-

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

Mise à jour: A sorti preserve_case comme par exemple ne pas utiliser et je voudrais mentionner pour les meilleures pratiques que le mot de passe ne devrait pas être dans le modèle ou les classes de schéma. Il devrait être dans config et si vous utilisez quelque chose qui le permet, comme mysql, il doit être configuré pour être lu à partir d'un fichier de configuration spécifique à une base de données restreinte par un privilège.

+1

Salut Ashley, c'est ce dont j'avais peur, j'ai trouvé ce petit bout de code mais je ne savais pas s'il y avait un moyen de le contourner. Je vais aller le dbicdump façon. J'ai juste écrit un petit assistant Perl qui saute manuellement le schéma. Pas mal. Merci d'avoir regardé ça. –

Questions connexes