DBIx::Classのちょっとしたメモ

メモ。

一応MySQLベースです。


デバッグ情報出力
$schema->storage->debug(1);

よく忘れますorz。実際に発行されたSQL文が出力されるので便利。


一行だけデータが欲しい
my $obj = $resultset->search( { hoge_id => $hoge_id } )->first;

# または

my $obj = $resultset->single( { hoge_id => $hoge_id } );

ただ上記の方法では実際には検索結果を全て取得してから一行返しているだけなので、キチンとLIMIT設定したければ下記のようになる。

my $obj = $resultset->search( { hoge_id => $hoge_id } )->slice(0,0)->first;
テーブルからランダムで一行取得
my $obj = $resultset->search({},{ order_by => ['rand()'] })->slice(0,0)->first;

こんなやり方いいのかどうかわかんないけどrand()関数をorder byしてLIMITするとテーブルからランダムで一行取得できます。

他にちゃんとしたやり方あるんだろうか。





次回へ続く?