我是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";
Run Code Online (Sandbox Code Playgroud)
我希望看到'isin'打印'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');
Run Code Online (Sandbox Code Playgroud)