2009-11-03 22 views
1

我試圖訪問我催化劑的應用程序一個mysql位字段。下面是表信息:我如何使用mysql位使用DBIx

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

但也不能工作。除了更改數據庫字段類型本身之外,還有其他方法嗎?

+1

你的意思DBIx ::類? DBIx ::是用於DBI相關擴展模塊的CPAN名稱空間,所以關於「使用DBIx」的問題不能提供足夠的信息。 – 2009-11-03 14:24:33

回答

4

我只是測試這和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)列。

另外,如果您在[email protected]上的DBIC郵件列表或irc.perl.org上的#dbix-class頻道上提問,您可能會得到更好的答案。