Tôi mới dùng Moose và đang cố gắng sử dụng nó với DBIx :: Class. Tìm kiếm công việc truy vấn và cập nhật DBIC cơ bản, nhưng bất kỳ trình kích hoạt nào tôi cố gắng viết sẽ không được thực hiện khi tôi sửa đổi một thuộc tính.Kích hoạt Moose không kích hoạt khi sử dụng 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";
Tôi hy vọng sẽ thấy trình kích hoạt 'inin' in 'FOO', nhưng không có gì xảy ra. Nếu tôi loại bỏ DBIx :: Class từ gói thì trigger được thực hiện như mong đợi.
Tôi nghi ngờ rằng DBIx :: Lớp đang đặt giá trị theo cách ngăn kích hoạt kích hoạt.
Thật không may, tôi không có nhiều may mắn khi tìm kiếm tài nguyên về việc sử dụng DBIx :: Lớp học với Moose. Những gì tôi đã viết chủ yếu dựa trên những gì tôi tìm thấy tại DBIx::Class and Moose.
Tôi có sử dụng DBIx :: Lớp học và/hoặc Moose sai không? Có một ORM khác mà tôi nên sử dụng với Moose không?
Các gói phần mềm với tác nhân kích thích sẽ không cháy:
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');
Dường như phương pháp được tạo tự động của DBIC sẽ ghi đè các phương thức được tạo tự động của Moose. Điểm moose là để ngăn chặn điều này, nhưng nó không thể làm điều đó khi một cái gì đó không sử dụng Moose. Có lẽ bạn chỉ muốn một "xung quanh" sửa đổi. – jrockway