[Catalyst] MySchema vs c->model(MySchemaModel)

John Lifsey - Contractor - 5595 john.lifsey at nrl.navy.mil
Fri Dec 3 21:15:00 GMT 2010


I'm running into an unexpected problem when using 
Catalyst::Model::DBIC::Schema. I tried the #dbix-class on IRC but 
thought this might be more related to Catalyst....

In MySchema::Result::Foo (built from default schema loader generated 
syntax using Moose/MooseX::nonmoose)

around 'BUILDARGS' => sub {
   my $orig = shift;
   my $class = shift;
   delete $_[0]->{not_a_real_column};
   return $class->$orig(@_);
};


This works as expected when using the schema directly.

   use MySchema;
   my $s = MySchema->connect('blah');
   $s->resultset('Foo')->new({ real_column=>'value', 
not_a_real_column=>'some other thing' }); #win

not_a_real_column is removed before a new row is instantiated

However, when using the same schema via C::M::DBIC::Schema the order is 
different
The following fails when trying to create a new Foo row object because 
not_a_real_column is invalid.
In other words it does not run thru BUILDARGS first.

   $c->model('MySchemaModel')->resultset('Foo')->new({ 
real_column=>'value', not_a_real_column=>'some other thing' }); #fail

I'm happy to acknowledge I'm DoingItWrong if that's the case, but the 
behavior struck me as odd considering it does work in the former example.

Anyone care to help me grok this?

PS: Interestingly enough, if I wrap around new (I know, that's sick 
wrong bad Mooseyness, but I did it to test) both test cases pass and 
everything works




More information about the Catalyst mailing list