我试图访问我催化剂的应用程序一个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 ) },
});

然而,这仍然将仍然无法更新,我不知道的简单作为该解决方案。我从来没有使用关于MySQL bit数据类型自己 - 。我通常使用一个CHAR(1)柱

此外,您可能,如果你在dbix-class@lists.scsys.co.uk或上irc.perl.org的#dbix级通道DBIC邮件列表上问得到更好的答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top