Sono nuovo di Moose e sto provando a utilizzarlo con DBIx :: Class. Il lavoro di ricerca e aggiornamento DBIC di base trova, ma qualsiasi trigger che tento di scrivere non viene eseguito quando modifico un attributo.I trigger alci non attivano quando si utilizza DBIX :: Class
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";
Mi aspetto di vedere il trigger per 'isin' print 'FOO', ma non succede nulla. Se spoglio DBIx :: Class dal pacchetto, il trigger viene eseguito come previsto.
Sospetto che DBIx :: Class stia impostando il valore in modo da impedire l'attivazione del trigger.
Purtroppo, non ho avuto molta fortuna a trovare risorse sull'utilizzo di DBIx :: Class con Moose. Quello che ho scritto è per lo più basato su ciò che ho trovato a DBIx::Class and Moose.
Sto usando DBIx :: Class e/o Moose errati? C'è un ORM diverso che dovrei usare con Moose?
Il pacchetto con il grilletto che il fuoco non sarà:
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');
Sembra che i metodi generati automaticamente da DBIC stiano sovrascrivendo i metodi generati automaticamente da Moose. Il punto di Moose è prevenire questo, ma non può farlo quando qualcosa non usa Moose. Forse vuoi solo un modificatore "attorno". – jrockway