2009-11-03 4 views
1

J'essaie d'accéder à un champ de bits mysql dans mon application de catalyseur. Voici l'info de table:Comment puis-je utiliser mysql bit à partir de DBIx

SQL:

create table foo{ 
... 
mybitField bit(1) NOT NULL default b'0' 
} 

Ma table mappée:

...

mybitField 
{ 
    data_type => "BIT", 
    default_value => "b'0'", 
    is_nullable => 0, 
    size => undef, 
    } 
... 

Maintenant, dans mon contrôleur, je fais simple

$c->stash->{foos}=[$c->model('DB::foo')->all]; 

et dans mon modèle, j'ai essayé les éléments suivants:

[% FOREACH foo IN foos -%] 
    <tr> 
     [%- IF int(foo.mybitField) %] 
       <td>The field is True</td> 
     [%- ELSE %] 
       <td>The field is False</td> 
     [% END %] 
    </tr> 
[% END -%] 

J'ai essayé aussi juste

[%- IF foo.mybitField %] 

mais cela ne fonctionne pas non plus. Toute autre manière en dehors de changer le type de champ de base de données lui-même?

+1

Voulez-vous dire DBIx :: Class? DBIx :: est l'espace de noms CPAN utilisé pour les modules d'extension liés à DBI, donc la question sur "l'utilisation de DBIx" ne fournit pas suffisamment d'informations. –

Répondre

4

Je viens de tester ceci et les champs MySQL BIT reviennent comme la valeur binaire "brute", comme prévu. Donc, il semble que ce que vous avez est un problème Template Toolkit.

Je ne sais pas ce que vous entendez par:

[%- IF int(foo.mybitField) %] 

Je ne pense pas que TT a une fonction int(). Et la fonction int() de Perl ne ferait pas non plus ce que vous voulez. Ma suggestion serait de soit écrire une fonction en Perl qui convertit la valeur en un nombre entier tassée régulière, par exemple:

my $int = unpack('c', $bit_field); 

Une alternative serait d'ajouter une colonne d'inflation de colonne à vos classes de schéma.

__PACKAGE__->inflate_column('mybitField', { 
    inflate => sub { unpack('c*', shift) }, 
}); 

Cependant, cela reste toujours pas mises à jour et je ne sais pas une solution simple, pour cela. Je n'ai jamais utilisé le type de données BIT moi-même sur MySQL - j'utilise généralement une colonne CHAR (1).

De même, vous obtiendrez peut-être de meilleures réponses si vous le demandez sur la liste de diffusion DBIC à l'adresse [email protected] ou sur la chaîne # dbix-class sur irc.perl.org.

Questions connexes