From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

DBIx::Class::Bootstrap::Simple - Simplistic bootstrapping for DBIx::Class

SYNOPSIS

Your model:

use strict;
__PACKAGE__->init(
table => 'users',
primary_key => 'user_id',
definition => [
{
key => 'user_id',
type => 'INT(11)',
special => 'AUTO_INCREMENT',
null => 0,
primary => 1,
},
{
key => 'company_id',
type => 'INT',
},
{
key => 'password_id',
type => 'INT(11)',
},
{
key => 'stash',
type => 'BLOB',
},
},
# link datetime objects here as well
objects => {
# class must have an inflate and deflate method
# inflate method is Class->inflate(value_to_inflate)
# deflate is $yourinflated_object->deflate;
stash => 'YourApp::DB::DataType::Stash',
},
references => {
company => {
class => 'YourApp::DB::Company',
column => 'company_id',
cascade_update => 1, #defaults to 0
cascade_delete => 1, #defaults to 0
cascade_copy => 1, #defaults to 0
},
password => {
class => 'YourApp::DB::Password',
column => 'password_id',
},
}
);

Your application:

# load other model classes
DBIx::Class::Bootstrap::Simple->build_relations;
my $schema = DBIx::Class::Bootstrap::Simple->connect(sub { });
# on a connection basis
$schema->storage->DESTROY;
my $dbh = DBI->connect(..., { RaiseError => 1 });
$schema->storage->connect_info([{
dbh_maker => sub { $dbh }
}]);
sub db
{
my ($self, $table) = @_;
die "invalid table name: $table"
unless $DBIx::Class::Bootstrap::Simple::CONFIG{$table};
return $schema->model($table);
}

METHODS

init

The init method should be called in every "table package", it configures DBIx::Class::Bootstrap::Simple with the table's schema.

__PACKAGE__->init(
table => 'users',
primary_key => 'user_id',
definition => [
{
key => 'user_id',
type => 'INT(11)',
special => 'AUTO_INCREMENT',
null => 0,
primary => 1,
},
{
key => 'company_id',
type => 'INT',
},
{
key => 'password_id',
type => 'INT(11)',
},
{
key => 'stash',
type => 'BLOB',
},
},
# link datetime objects here as well
objects => {
# class must have an inflate and deflate method
# inflate method is Class->inflate(value_to_inflate)
# deflate is $yourinflated_object->deflate;
stash => 'YourApp::DB::DataType::Stash',
},
references => {
company => {
class => 'YourApp::DB::Company',
column => 'company_id',
cascade_update => 1, # defaults to 0
cascade_delete => 1, # defaults to 0
cascade_copy => 1, # defaults to 0
},
password => {
class => 'YourApp::DB::Password',
column => 'password_id',
},
banjos => {
class => 'YourApp::DB::Banjos',
column => 'user_id',
# or, if mapping columns differ
local_column => 'banjo_user_id',
foreign_column => 'eskimo_banjo_user_id',
},
}
);

build_relations

Builds relationship mapping for used schema modules.

dbh

Returns raw dbh handle.

begin_work

Begin a transaction.

commit_work

Commit a transaction.

rollback_work

Rollback a transaction.

rs

Returns a resultset.

create

Mapping to resultset->create(...)

Mapping to resultset->search(...)

search_rs

Mapping to resultset->search_rs(...)

find

Mapping to resultset->find(...)

find_or_create

Mapping to resultset->find_or_create(...)

model

Given a table name as an argument, return a resultset from a table name.

Example:

DBIx::Class::Bootstrap::Simple->model('users')->create({ name => 'Moon Panda' });

METHODS TO SUBCLASS

override_resultset_class

Subclass this to change the resultset class.

object_type_map

This provides a default mapping of objects for inflation.

An example may be:

sub object_type_map { return { date => 'Your:::DateTime::Package', } }

COPYRIGHT

Copyright 2012 Ohio-Pennsylvania Software, LLC.

LICENSE

This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

2012 Ohio-Pennsylvania Software, LLC