2012-09-25 110 views
4

我在我的perl腳本中使用DBIx :: Class與sqlite數據庫進行交互。DBIx :: Class如何處理布爾值?

當進行插入/搜索時,DBIx :: Class會認爲'true'和'false'是什麼?

如:

$schema->resultset('SomeObject')->create({ some_boolean => 1, primary_key => 1 });

$schema->resultset('SomeObject')->search({ some_boolean => 'true' });

任何幫助或文檔讚賞(我一直沒能找到它在DBIx ::類文檔,但也許我錯過一些東西。

在此先感謝。

回答

0

DBIx ::類會像對待真與假perl的方式呢.. 。0,'',undef,()和{}是「false」,而其他的都是「true」。

+0

什麼null值?我認爲這個類將undef視爲NULL。 – Blaskovicz

+0

我不這麼認爲,但我找不到支持這兩種方式的文檔。 – harleypig

+0

我可以確認它將undef視爲null。 – Blaskovicz

0

因爲人們發現這是很有幫助的,我想我會在get_bool扔()函數I寫了一個perl值翻譯成DBIx可接受格式:與DBIx::Class::InflateColumn::Boolean幫助

sub get_bool { 
    my $self = shift; 
    my $bool = shift; 
    return undef if(!defined $bool || $bool =~ m/^null$/i); 
    return 0 if($bool =~ m/^(fail|not_ok|error|0)/i || $bool =~ m/^\s*$/); 
    return 1; 
} 
0

DBIx::Class手柄布爾值:

負荷此組件和聲明爲博列齊墩果值。

package Table; 
    __PACKAGE__->load_components(qw/InflateColumn::Boolean Core/); 
    __PACKAGE__->table('table'); 
    __PACKAGE__->true_is('Y'); 
    __PACKAGE__->add_columns(
     foo => { 
      data_type => 'varchar', 
      is_boolean => 1, 
     }, 
     bar => { 
      data_type => 'varchar', 
      is_boolean => 1, 
      true_is  => qr/^(?:yes|ja|oui|si)$/i, 
     }, 
     baz => { 
      data_type => 'int', 
      is_boolean => 1, 
      false_is => ['0', '-1'], 
     }, 
); 

然後你就可以把指定列的布爾:

print 'table.foo is ', $table->foo ? 'true' : 'false', "\n"; 
    print 'table.bar is ', $table->bar ? 'true' : 'false', "\n"; 

布爾對象仍然stringifies實際字段值:

print $table->foo; # prints "Y" if it is true 

UPD如何選擇行其字段爲真
因爲DBIx::Class使用SQL::Abstract搜索與TRUE值應該參考bool元運算符字段:

my %where = (
    -bool  => 'is_user', 
    -not_bool => 'is_enabled', 
); 

會給你:

WHERE is_user AND NOT is_enabled