ブログトップ 記事一覧 ログイン 無料ブログ開設

サンプルコードによるPerl入門

2012-04-02

便利なフェッチ方法 / DBIx::Customリファレンス

 DBIx::Custom::Resultクラスは他にも便利なフェッチするためのメソッドがあります。

value

 ひとつの値を取得するのにvalueメソッドは便利です。最初の行の最初の値だけを取得できます。フェッチできなかった場合はundefを返します。

my $value = $result->value;

 valueメソッドは、count関数などを使って、件数を取得したい場合に便利でしょう。

my $count = $dbi->select('count(*)')->value;

 以下の記述とほぼ同じ意味になります。

my $count = $dbi->select('count(*)')->fetch_one->[0];

values

 最初の列の複数の値を取得するのにvaluesメソッドは便利です。

my $values = $result->values;

 たとえばMySQLの「show tables」文を実行してテーブル一覧を取得するときに利用できます。

my $tables = $dbi->select('show tables')->values;

 これは以下の記述と同じ意味になります。

my $rows =  $dbi->select('show tables')->fetch_all;
my $tables = [map { $_->[0] } @$rows];

flat

 flatメソッドは、取得した行の値をひとつの平坦なリストにします。

my @list = $result->flat;

 たとえば以下のような処理を実行するとします。

my @list = $dbi->select(['id', 'title'])->flat;

 そして以下のようなテーブルだったとします。

(ヘッダ) id    title 
         1     Perl
         2     Ruby

 するとflatメソッドは以下のようなリストを返却します。

(1, 'Perl', 2, 'Ruby')

 ハッシュに代入すればキーと値のペアを簡単に取得できます。

my %titles = $dbi->select(['id', 'title'])->flat;

kv

 kvメソッドはキーと値のペアを取得するときに便利です。

my $key_value = $result->kv;
my $key_values = $result->kv(multi => 1);

 たとえば、本のIDをキーとしてタイトルと著者の値としたハッシュのリファレンスを取得するには次のようにします。

my $books = $dbi->select(['id', 'title', 'author'])->kv;

 これは以下のようなデータになります。

{
  1 => {title => 'Perl', author => 'Ken'},
  2 => {title => 'Ruby', author => 'Taro'}
}

kvs

 一つのキーに対して複数の値を対応させたい場合はkvsメソッドを使用します。

my $books = $dbi->select(['author', 'title', 'price'])->kvs;

 次のような値が返却されます。

{
  Ken => [
    {title => 'Perl', price => 1000},
    {title => 'Good', price => 2000}
  ],
  Taro => [
    {title => 'Ruby', price => 3000},
    {title => 'Sky', price => 4000}
  ]
}


DBIx::Customリファレンスへ