5

私はperlスクリプトでDBIx::Classを使用して、sqliteデータベースと対話しています。

挿入/検索を行うとき、DBIx :: Classは「true」と「false」を何と見なしますか?

例えば:

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

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

ヘルプやドキュメントをいただければ幸いです(DBIx :: Classのドキュメントでは見つかりませんでしたが、何かが足りない可能性があります。

前もって感謝します。

4

4 に答える 4

1

DBIx::ClassDBIx :: Class :: InflateColumn :: Boolean:を使用してブール値を処理します

このコンポーネントをロードし、列をブール値として宣言します。

  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";

ブールオブジェクトは、実際のフィールド値に文字列化されます。

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

UPDフィールドがtrueである行を選択する方法は、値を使用してフィールドを検索する
ためにDBIx::Class使用するため、単項演算子を参照する必要があります。SQL::AbstractTRUEbool

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

あなたに与えるだろう:

WHERE is_user AND NOT is_enabled
于 2016-12-14T16:52:03.337 に答える
0

DBIx :: Classは、perlと同じようにtrueとfalseを扱います... 0、''、undef、()、{}は「false」ですが、それ以外は「true」です。

于 2012-09-25T22:59:43.347 に答える
0

http://sqlite.org/datatype3.htmlによると、SQLiteにはブールデータ型はありませんが、falseは整数0として格納され、trueは整数1として格納されます。

于 2012-09-25T23:16:31.047 に答える
0

人々はこれが役立つと思っているので、perl値をDBIxで受け入れ可能な形式に変換するために書いたget_bool()関数を投入すると思いました。

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;
}
于 2014-05-08T15:46:35.363 に答える