Я плохо знаком с Американским лосем и пытаюсь использовать его с DBIx:: Класс. Основные запросы DBIC и обновление работы находят, но любой триггер, который я пытаюсь записать, не становится выполняемым, когда я изменяю атрибут.
use Modern::Perl;
use Data::Dumper;
my $schema = My::Schema->connect(, , ) 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' печатает 'НЕЧТО', но ничего не происходит. Если я разделяю DBIx:: Класс от пакета триггер выполняется как ожидалось.
Я подозреваю что DBIx:: Класс устанавливает значение способом, которое препятствует тому, чтобы триггер стрелял.
К сожалению, у меня не было большой удачи при нахождении ресурсов об использовании DBIx:: Класс с Американским лосем. То, что я записал, главным образом на основе того, что я нашел в DBIx:: Класс и Американский лось.
Я использующий DBIx:: Класс и/или Американский лось неправильно? Существует ли другой 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');
Вы пробовали использовать вместо него writer => \ & _ mod_isin
?