[Dbix-class] DBIx::Class::Loader 0.18 released

Alex Kavanagh alex at tinwood.homelinux.org
Sun Feb 5 21:51:25 CET 2006


At Sat, 4 Feb 2006 15:03:56 -0600,
Brandon Black wrote:
> 
> On 2/4/06, Brandon Black <blblack at gmail.com> wrote:
> > On 2/4/06, Alex Kavanagh <alex at tinwood.homelinux.org> wrote:
> > > Brandon Black wrote:
> > > > DBIx-Class-Schema-Loader is now at version 0.01002 on CPAN, and it
> > > > seems like it should work for most people.  Please give it a shot.
> > > > The transition could be rough for some, as some Loader users are
> > > > probably using Loader-isms in their DBIx::Class code that will need to
> > > > be changed to Schema-isms.  By 0.02 I expect it to be fairly stable,
> > > > other than future feature additions for obtaining better metadata and
> > > > building smarter relationships.
> > >
> > > Okay, I'd like to try to switch.  I'm using it with Catalyst which
> > > I've only just started using and therefore I don't really know whether
> > > I'm using bad DBIx::Class usage habits.
> > >
> > > Is there a tutorial or some info on how to switch from D::C::L to
> > > D::C::S::L ??
> > >
> >
> > No, there's no such tutorial at this time, although perhaps there
> > should be a guide of sorts.
> >
> > The problem can really be divided into two parts.  Firstly, even with
> > older versions of DBIx::Class and DBIx::Class::Loader, some people are
> > unwittingly using loader-specific methods and not realizing it.  For
> > instance, I was using My::DB->table('foo_table')->search() all over
> > the place in my code.  That usage of ->table('foo_table') is a
> > Loader-ism.  Even at the time, converting off of ::Loader to a
> > manually-defined DBIx::Class would have meant eliminating that usage.
> >
> > Secondly, there's the differences between the old DB-based way of
> > using DBIx::Class, and the new Schema way.  The old DB-way still works
> > for manual users of DBIx::Class, or users of DBIx::Class::Loader
> > against newer DBIx::Class, but I don't believe it quite works for
> > using ::Schema::Loader, seeing as the entire definition is done in the
> > Schema way, not the DB way.
> >
> > In the DB way, it was possible to do things like
> > My::DB::FooTable->search();
> >
> > Whereas in the Schema way, this should be written:
> > $myschema->resultset('foo_table')->search();
> >
> > Even in pre-0.05 DBIx::Class, the first method using statically
> > defined Table-class names was unwise, but it just worked.  It still
> > works if your database and table classes are defined the DB-way, just
> > not if they're defined in the newer/better Schema way of doing things.
> >  The new Schema::Loader defines them in the Schema way, so...
> >
> > Someone who was using DBIx::Class::Loader and then usage patterns like
> > MyDB->table('foo')->search()
> >
> > or
> > MyDB::Foo->search()
> >
> > will need to switch to:
> > $myschema->resultset('foo')->search()
> >
> > Technically you can also do:
> > My::Schema->resultset('foo')->search() on a connected schema-class,
> > but it's probably unwise as you'll have to go back and make them
> > object methods if you ever want to use multiple connections at the
> > same time within the same perl execution environment (for instance, if
> > this code is in a mod_perl app, and multiple instances of this app
> > with seperate databases are expected to run in a single apache
> > server).
> >
> > There are also loader-specific mechanisms in a Schema generated by
> > DBIx::Class::Schema::Loader, which should be avoided if you ever might
> > move off of Schema::Loader to manually defining your Schema.  However,
> > it's rather difficult to not realize you're using them, as they are
> > all accessed via $myschema->loader, like $myschema->loader->tables;
> > $myschema->loader->monikers; etc.
> >
> > When/if you convert off od Schema::Loader, $myschema->loader is the
> > only thing that will cease to exist.  Everything else should work the
> > same regardless of whether you're using ::Schema::Loader or a
> > manually-defined Schema.
> >
> 
> That posting was a bit hasty, as the examples are poor.  The usages
> shown of ->resultset() should look more like ->resultset('FooTable'),
> as the monikers tend to be uppercased in their first letters and not
> contain underscores.

Okay, that's very useful and has definitely pointed me in the right
direction. I think I've got a handle on how to use it manually.  Now
I've got to work out how to tie into in to Catalyst.  Time for a post
in the Catalyst mailing list I think.

Thanks
Alex.



More information about the Dbix-class mailing list