どのように私はDBIxを使用してから、mysqlのビットを使用することができます
質問
私は自分の触媒アプリでmysqlのビットフィールドにアクセスしようとしています。ここでは、テーブル情報があります:
SQLます:
create table foo{
...
mybitField bit(1) NOT NULL default b'0'
}
マイマップされたテーブル:
...
mybitField
{
data_type => "BIT",
default_value => "b'0'",
is_nullable => 0,
size => undef,
}
...
今私のコントローラでは、私は、単純な
$c->stash->{foos}=[$c->model('DB::foo')->all];
と私のテンプレートで、私は次のことを試してみました。
[% 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 -%]
私もちょうど試してみました。
[%- IF foo.mybitField %]
が、それはどちらか動作しませんでした。別にデータベースフィールドの型自体を変更することから、他の方法?
解決
私はこれをテストし、期待通りにMySQLのビットフィールドは、「生」のバイナリ値として戻ってきます。 だから、それはあなたが持っているものと思われるテンプレートツールキットの問題です。
私はあなたのことで何を意味するのか分かりません
[%- IF int(foo.mybitField) %]
私はTTがint()関数を持っているとは思いません。そして、PerlのINT()関数はどちらか、あなたがやりたいことではないでしょう。私の提案は、例えば、通常の整数にパックされた値を変換Perlでの関数を書くのいずれかになります:
my $int = unpack( 'c', $bit_field );
の代替は、スキーマのクラスにいくつかの列インフレ列を追加します。
__PACKAGE__->inflate_column('mybitField', {
inflate => sub { unpack( 'c*', shift ) },
});
しかし、これはまだ、まだ更新のために失敗し、私はそのためのシンプルなのソリューションを知りません。私は、BITデータは、MySQL上で自分自身を入力し使ったことがない - 私は通常CHAR(1)のカラムを使用する
。 あなたがdbix-class@lists.scsys.co.ukで、またはirc.perl.org上の#dbixクラスのチャンネルでDBICメーリングリストで尋ねる場合は、また、あなたはより良い答えを得る可能性があります。
所属していません StackOverflow