Class::DBIで日付型データの登録

登録日時という項目があるのでcreate()したときにシステム日時を設定したかったのですが、やり方が分からなくてはまりました。DBIでやるときは自分でSQLを書くから困らないのですけどね。Class::DBIでも直接SQLを書くことができるのですが、いまいちな感じがするのでやり方を調べました。

方法その1はadd_trigger()を使う方法。

__PACKAGE__->add_trigger(after_create => \&after_create);

としておいて、after_create()の中でUPDATEを発行します(結局自分でSQLを書くことになります)。

方法その2はset_sql()を使う方法(create_dateが項目名です)。

__PACKAGE__->set_sql(MakeNewObj => <<EOD);
insert into __TABLE__ (create_date, %s)
values (CURRENT_TIMESTAMP, %s)
EOD

これでcreate()してinsertのSQLが作成される際に自動的に登録日時も設定されます。

上記どちらの方法でもうまくいきましたが、方法2を採用しました。