Question

Je suis en train d'accéder à un champ de bits mysql dans mon application de catalyseur. Voici l'info de table:

SQL:

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

Mon 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, je l'ai essayé ce qui suit:

[% 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 aussi essayé simplement

[%- IF foo.mybitField %]

mais cela ne fonctionne pas non plus. Toute autre façon en dehors de changer le type de champ de base de données elle-même?

Était-ce utile?

La solution

Je viens de tester cela et MySQL Les champs de bits revenir comme la valeur binaire « brute », comme prévu. Il semble donc ce que vous avez un problème de boîte à outils de modèles.

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 () Perl ne ferait pas ce que vous voulez, que ce soit. 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 autre solution 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 ne ai jamais utilisé les données BIT me taper sur MySQL -. J'utilise généralement une colonne CHAR (1)

En outre, vous pouvez obtenir de meilleures réponses si vous demandez sur la liste de diffusion de DBIC à dbix-class@lists.scsys.co.uk ou au canal # DBIx classe sur irc.perl.org.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top