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