架構模型對於任何給定的結果類MYSCHEMA ::結果::美孚(從默認模式裝載機內置生成 語法它使用駝鹿/ MooseX :: nonmoose)駝鹿方法改性劑::在催化劑
如果我添加一個BUILDARGS方法包裝消毒的構造數據行,像這樣:
package MySchema::Result::Foo;
use Moose;
use MooseX::NonMoose;
[etc ..]
around 'BUILDARGS' => sub {
my $orig = shift;
my $class = shift;
delete $_[0]->{not_a_real_column};
return $class->$orig(@_);
};
它直接使用模式時工作。 例如按預期以下工作:一個新的行對象與real_column =>「值」創建和前not_a_real_column去除 - 通過催化劑::模型使用相同的模式時>新被稱爲
use MySchema;
my $s = MySchema->connect('dbi:blahblahblah');
$s->resultset('Foo')->new({ real_column=>'value', not_a_real_column=>'some other thing' }); #win
然而, :: DBIC :: Schema的順序是 不同。嘗試創建新的Foo行對象時以下失敗,因爲 not_a_real_column無效。換句話說,new之前的參數不會在BUILDARGS之前運行 - > new被調用。
$c->model('MySchemaModel')->resultset('Foo')->new({ real_column=>'value', not_a_real_column=>'some other thing' }); #fails
有趣的是,如果我環繞「新」 =>子{},而不是圍繞「BUILDARGS」 =>子{}行爲是在兩種情況下是相同的,並且工作正常,但我的理解穆斯的教條規定永遠不要混淆新的。
有人幫我理解爲什麼會出現這種情況,或者有更好的方法嗎?