Moose は初めてで、DBIx::Class で使用しようとしています。基本的な DBIC のクエリと更新は機能しますが、属性を変更すると、書き込もうとしたトリガーが実行されません。
use Modern::Perl;
use Data::Dumper;
my $schema = My::Schema->connect(<connect str>, <usr>, <psw>) or die $!;
my $rs = $schema->resultset('Isin')->search( sid => 3929 );
my $security_obj = $rs->first;
print $security_obj->isin, "\n";
$security_obj->isin('Test1Foo'); # <- expect to see FOO printed by trigger
print $security_obj->isin, "\n";
'isin' print 'FOO' のトリガーが表示されることを期待していますが、何も起こりません。パッケージから DBIx::Class を取り除くと、トリガーは期待どおりに実行されます。
DBIx::Class がトリガーの発火を妨げるような方法で値を設定していると思われます。
残念ながら、Moose での DBIx::Class の使用に関するリソースを見つけることができませんでした。私が書いたものは、ほとんどDBIx::Class と Mooseで見つけたものに基づいています。
DBIx::Class や Moose を間違って使用していますか? Mooseで使用すべき別のORMはありますか?
起動しないトリガーを含むパッケージ:
package My::Schema::Result::Isin;
use DBIx::Class;
use Moose;
use Carp;
extends 'DBIx::Class';
has 'isin' => ( is => "rw", isa => "Str", trigger => \&_mod_isin);
has 'sid' => ( is => "ro", isa => "Int");
sub _mod_isin {
print "FOO\n";
return;
};
no Moose;
__PACKAGE__->load_components('Core');
__PACKAGE__->table('isin');
__PACKAGE__->add_columns(
isin => { data_type => 'varchar2', size => 12 },
sid => { data_type => 'integer', size => 6 },
);
__PACKAGE__->set_primary_key('isin');