[Catalyst] Accessing schema in non-DBIC-model

Matt S Trout dbix-class at trout.me.uk
Sun Jul 20 01:36:24 BST 2008


On Tue, Jul 01, 2008 at 02:49:37PM +0200, Tobias Kremer wrote:
> I'm using Catalyst::Model::DBIC::Schema to make my DBIC schema available as
> model in my Catalyst application. Now I'd like to create a custom model (e.g.
> MyApp::Model::Custom) which during the server start fetches and calculates some
> stuff from the database via my DBIC schema and keeps it in the object to speed
> up retrieval in my Cat app. I want to do:
> 
> my $rs = $c->model( 'Custom' )->find_by_foo( $foo )
> 
> and get back a (e.g. MyApp::Schema::Foo) ResultSet with stuff fetched during
> server start that fits the condition $foo.
> 
> My problem is that I can't think of an elegant way to access the initialized
> schema from within the models new or COMPONENT method (which is called during
> server start when the model is set up). I tried this:
> 
> sub COMPONENT {
>     my( $class, $app, $args ) = @_;
>     $app->model( 'Schema::Foo' )->result_source->schema ...
> }
> 
> But, of course, $app->model('Schema::Foo') isn't fully initialized at that time.
> 
> Any hint is greatly appreciated!

Catalyst initializes less-namespaced names first.

So I suspect if you called this MyApp::Model::Schema::Precache then
$c->model('Schema')->resultset('Foo') would be fine.

-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/            http://www.shadowcat.co.uk/servers/



More information about the Catalyst mailing list