dbic 3 - primer
DESCRIPTION
Gives an introduction to working with DBIx::Class row objects as well as other mid-level DBIC concepts. Assumes an understanding of databases and a rudimentary understanding of DBIC.TRANSCRIPT
DBIx::Class Primer
How to do common day-to-day tasks.
Creating Rows: create()
• Get a resultset and call:$rs->create(\%vals).
• Effectively a shortcut for:$rs->new_result(\%vals)->insert().
my $campaign = $campaigns->create( { campaign_name => ‘Test’ });
Updating Rows: update()
$campaign->update( { campaign_name => ‘Test Test’ });
# Is the same as...
$campaign->campaign_name( ‘Test Test’ );$campaign->update();
Deleting Rows
# Delete all campaigns!
$campaigns->delete();
# Or just delete one row.
$campaign->delete();
Find Rows: find()
• Returns a single row.• Argument is the value of the primary key.• Multiple values may be passed in the case of a
multiple column primary key.• If passing multiple values then use named
arguments.
my $campaign = $campaigns->find( $cid );
my $translation = $translations->find( { message_code => $message_code, language_code => $language_code, accounting_division_id => 0,} );
find_or_create()
my $campaign = $campaigns->find_or_create( { campaign_name => ‘Test Test’ });
# Is the same as...
my $campaign = $campaigns->find( { campaign_name => ‘Test Test’ });$campaign ||= $campaigns->create( { campaign_name => ‘Test Test’ });
update_or_create()
my $campaign = $campaigns->update_or_create( { campaign_name => ‘Test Test’, status => 0 });
# Is the same as...
my $campaign = $campaigns->find( { campaign_name => ‘Test Test’ });
if ($campaign) { $campaign->update({ status=>0 });} else { $campaign = $campaigns->create( { campaign_name=>‘Test Test’, status=>0 } );}
Relationships
• DBIC supports one-to-many, many-to-one, many-to-many, and one-to-one relationships.
• Using these relationships is straightforward.
# A one-to-many (has_many) relationship:my $campaigns = $advertiser->campaigns();
# A many-to-one (belongs_to) relationship:my $advertiser = $campaign->advertiser();
# A one-to-one (has_one) relationship:my $money = $campaign->money();
# A many-to-many (many_to_many) relationship:my $users = $role->users();
Resources
• DBIx::Class Manual @ CPANhttp://search.cpan.org/~jrobinson/DBIx-Class-0.08009/lib/DBIx/Class/Manual.pod
• DBIx::Class Tutorial (under development)http://desert-island.me.uk:8888/perldoc/dbic-tutorial/lib/DBIx/Class/Tutorial/