Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^3: Class::DBI vs. DBIx::Class

by rafl (Friar)
on Jun 25, 2006 at 15:20 UTC ( #557438=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Class::DBI vs. DBIx::Class
in thread Class::DBI vs. DBIx::Class

On the other hand, this comes at the price of longer code for simple tasks, e.g., for inserting into a table 'Person', one would use
# using DBIx::Class: $schema->resultset('Person')->new({FirstName=>'Joe'})->insert(); # using Class::DBI: DB::Person->insert({FirstName=>'Joe'});

How about:

$schema->resultset('Person')->create({ FirstName => 'Joe' });

If you don't want to get the resultset from the schema first, you'll need to use DBIx::Class (DBIC) without a schema, which is usually called CDBI plain, but you'll then loose the advantages of the composable schemas, which, for example, allow you to connect to multiple databases from the same set of classes. I think using schemas is usually worth the overhead.

I don't really know how to solve your problem with the posted snippet, but I suspect it's caused by the load_classes call. You can probably work that around with using register_class or register_source, but I haven't really looked into that as I don't like to ram up a single .pm file with several modules.

Cheers, Flo


Comment on Re^3: Class::DBI vs. DBIx::Class
Select or Download Code
Re^4: Class::DBI vs. DBIx::Class
by hrr (Monk) on Jun 25, 2006 at 16:08 UTC
    Thank you very much! register_class works well:
    package DB; map { __PACKAGE__->register_class($_, __PACKAGE__ . "::$_") } qw(Perso +n);
    Actually, connecting to single database is sufficient for me in most of the cases, so working without a schema would be great. How would I do this concretely? It did not find it in the documentation---apparently, working with a single database is (surprisingly) not very popular. Would I need to declare DB::Person as a subclass of ResultSource?
      Actually, connecting to single database is sufficient for me in most of the cases, so working without a schema would be great. How would I do this concretely? It did not find it in the documentation---apparently, working with a single database is (surprisingly) not very popular. Would I need to declare DB::Person as a subclass of ResultSource?

      Take a look at DBIx::Class::DB. Even if you only want to connect to a single database only, it's strongly recommended to use a schema-based setup. Further explanations can be found in DBIx::Class::DB as well.

      What's your reason against a schema, except you might never need all the features, which is not a problem in my eyes? Is it too much work to write "$schema->" all the time? I could understand that, but there are better ways around this than to use the connection-as-classdata style like Class::DBI does.

      Cheers, Flo

        Thank you for the reference and for the warning. As you have suspected, it is "$schema->" that is bothering me. Writing it is not the problem, but it makes reading a bit harder, especially because it increases the chances that an expression does not fit on one line...

        You say that there are better ways around it. Did you have something like sub resultset { $schema->resultset(@_) } in mind? This would indeed be a reasonable resolution of my concerns.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://557438]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2014-09-21 00:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (165 votes), past polls