DBIC 3 - Primer

9
DBIx::Class Primer How to do common day-to- day tasks.

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 of DBIC 3 - Primer

Page 1: DBIC 3 - Primer

DBIx::Class Primer

How to do common day-to-day tasks.

Page 2: DBIC 3 - Primer

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’ });

Page 3: DBIC 3 - Primer

Updating Rows: update()

$campaign->update( { campaign_name => ‘Test Test’ });

# Is the same as...

$campaign->campaign_name( ‘Test Test’ );$campaign->update();

Page 4: DBIC 3 - Primer

Deleting Rows

# Delete all campaigns!

$campaigns->delete();

# Or just delete one row.

$campaign->delete();

Page 5: DBIC 3 - Primer

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,} );

Page 6: DBIC 3 - Primer

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’ });

Page 7: DBIC 3 - Primer

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 } );}

Page 8: DBIC 3 - Primer

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();

Page 9: DBIC 3 - Primer

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/