[Catalyst] Models and inflating

Jonathan Rockway jon at jrock.us
Mon Feb 23 18:52:21 GMT 2009


* On Mon, Feb 23 2009, Alexander Tamm wrote:
> Hi,
>
> I'm still a bit confused about how models using DBIx::Class should
> work in a catalyst application.
>
> Is it the case that classes placed in the Model-directory will somehow
> (magically?) let me have objects inflated as instances of the class
> using a similarly named Schema?
>
> For example, I have this class:
>
> package TestApp::Model::Foo::User;
>
> use strict;
> sub full_name {
>     my ( $self ) = @_;
>     return $self->first_name() . q{ } . $self->last_name();
> }
> 1;
>
> Objects created by $c->model('Foo::User') *will* work. Ie. they have
> the methods full_name(), first_name() and last_name().
>
> It looks a bit weird to me, but it seems to work. Should it work?

You shouldn't do this (*), it is very confusing.  Put functions like
this in the row class, i.e. YourApp::Schema::Foo::User, so that all
users of the schema have access to these methods.

Catalyst::Model::DBIC::Schema just proxies each class so that
$c->model('Schema::Foo') == $c->model('Schema')->resultset('Foo').
That's all you should use it for.

(*) BTW, the behavior you described does work intentionally, for cases
when you need the objects in Catalyst to be different than with plain
DBIC.  I think it's a bad idea to use this "feature" except in very
special cases -- of which "full_name" is not one.

Regards,
Jonathan Rockway

--
print just => another => perl => hacker => if $,=$"



More information about the Catalyst mailing list