Domanda

Sto cercando di accedere ad un campo di bit mysql nel mio catalizzatore app. Ecco le informazioni tabella:

SQL:

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

Il mio tavolo mappato:

...

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

Ora, nel mio controller, faccio un semplice

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

e nel mio modello, ho provato quanto segue:

[% 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 -%]

Ho provato anche solo

[%- IF foo.mybitField %]

, ma che non ha funzionato neanche. Qualsiasi altro modo oltre a cambiare il tipo di campo database stesso?

È stato utile?

Soluzione

Ho appena provato questo e campi di bit MySQL tornare come il valore binario "grezzo", come previsto. Così sembra quello che hai è un problema di modello di Toolkit.

Non so cosa si intende per:

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

Non credo TT ha una funzione int (). E la funzione di Perl int () non fare quello che vuoi, sia. Il mio suggerimento sarebbe quello di scrivere una funzione sia in Perl, che converte il valore imballato in un intero normale, per esempio:

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

Un'alternativa sarebbe di aggiungere qualche colonna di inflazione in base alle proprie classi dello schema.

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

Tuttavia, questo ancora sarebbe ancora fallire per gli aggiornamenti e non so un semplice soluzione per questo. Non ho mai usato i dati BIT me stesso tipo su MySQL -. Io di solito uso un CHAR (1) colonna

Inoltre, si potrebbe ottenere risposte migliori se si chiede sulla mailing list DBIC a dbix-class@lists.scsys.co.uk o al canale # DBIx-classe su irc.perl.org.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top