created: 2019-04-08T09:43:30.000Z

perlのDBIx::Class::ResultSetでちょい手の込んだSELECTの例1

  • searchメソッドはすごい色々できるので覚えきれない
  • 特に第二引数のハッシュに渡せるものがすごい色々できる
$tab1_resultset->search(
    {
        # 1つ目の引数は検索条件
        'tab1.id' => $id,
        'okok.status' => STATUS_NOTYET
    },
    {
        # SQLでいう射影部分 (カラム名とalias)
        '+select' => [
            'tab1.name',
            \'COUNT(1)',
            \'MIN(okok.created)'
        ],
        '+as' => [qw/
            tab_name
            count
            earliest_created
        /],
        # resultsetクラスで定義したrelationの名前を書く (テーブル名そのままではない)
        join => ['okok', 'qr'],
        # 自resultsetクラスはmeで表す
        group_by => ['me.id'],
        order_by => [
            # 集計など、文字列をそのまま埋めたい場合はstringのrefをとる (injection注意)
            { -desc => \'MIN(DATE(qr.created))' },
            { -desc => \'COUNT(1)' }
        ]
    }
);

参考