昔実装してみたけれど、ブログに書いてなかったので書きます。
以前、ORMを使ってる時にDBIx::DataFactoryを使うとtriggerとかの関係で面倒って言われたので、その解決策として、データ作成メソッドをcoderefで指定できるようにしてみました。
creatorとしてcoderefを指定すると、そのcodeにDBIx::DataFactoryで作成された値がhashrefで渡されるので、それを使ってinsertを行うって感じです。また、その時にreturnした値が、実際に作成されたメソッドを使ったときに返ってきます。
具体的には
$factory_maker->create_factory_method( method => 'create_factory_data', table => 'test_factory', creator => sub { my ($values) = @_; my $db = DBIx::Simple->connect( 'dbi:mysql:test_factory', 'root', '', ); # your setting $db->abstract = SQL::Abstract->new; my $result = $db->insert('test_factory', $values); return $result; # this is used for return value of create_factory_data }, );
と書くと、DBIx::Simpleのinsertがデータ作成として使われ、create_factory_dataの返り値として$resultの値が返ってきます。
このやり方が良いかどうかは微妙なので、意見もらえると嬉しいです。