Soy nuevo en Moose y estoy tratando de usarlo con DBIx :: Class. Consulta básica de DBIC y actualización del trabajo encontrado, pero cualquier desencadenante que intente escribir no se ejecuta cuando modifico un atributo.Disparadores de alces que no se activan cuando se usa DBIX :: Clase
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";
Espero ver el disparador para 'isin' imprimir 'FOO', pero no pasa nada. Si elimino DBIx :: Class del paquete, el desencadenador se ejecutará como se espera.
Sospecho que DBIx :: Class está estableciendo el valor de una manera que evita que el disparador se dispare.
Desafortunadamente, no he tenido mucha suerte para encontrar recursos sobre el uso de DBIx :: Class con Moose. Lo que he escrito se basa principalmente en lo que encontré en DBIx::Class and Moose.
¿Estoy usando DBIx :: Class y/o Moose mal? ¿Hay algún ORM diferente que debería usar con Moose?
El paquete con el gatillo que el fuego no será:
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');
Parece que los métodos autogenerados de DBIC están sobreescribiendo los métodos autogenerados de Moose. El objetivo de Moose es evitar esto, pero no puede hacer eso cuando algo no usa Moose. Tal vez solo quieres un modificador "alrededor". – jrockway