NAME

DBO::Base::Defs - Table definition routines.

SYNOPSIS

package Customer;
use base qw(DBO::Base);

Customer->def_data_source  ('my_db', 'Customer');
Customer->def_accessor     ('cust_id', { column => 'id', auto_increment => 1 });
Customer->def_column       ('id',      { accessor => 'id', auto_increment => 1 }); # Same thing!
Customer->def_accessor     ('name'};
Customer->def_accessor     ('address');
Customer->def_accessor     ('affiliate_id');
Customer->def_accessor     ('database_time', { expr => 'now()'} );


## Explicit key creation
Customer->def_primary_key  ([qw(id cust_loc)]);
Customer->def_key          ([qw(name affiliate_id)]);

## Relationship based on primary key
Customer->def_has_a        ('affiliate', 'Affiliate', +{})
Customer->def_has_many     ('orders', 'Order',+{})

## Relationship explicitly defined
Customer->def_has_a        ('affiliate', [qw(name aff_id)], 'Affiliate_table', [qw(c_name id)]);
Customer->def_has_many     ('orders', 'Order', ['cust_id'], ['id'],+{});

## Relationship based on a join
Employee->def_has_many     ('supervisors', 'Supervisor',
                                          new DBO::Query->select('super_id')
                                          ->from('emp_super')
                                          ->join('employee')
                                          ->using('emp_id')
                                          ->where(+{emp_id => '?'}), sub { shift->emp_id });


## select multiple columns at once for speed
Customer->def_select_group ([qw(name address)]);

## name the select_group so you can refer to it later
Customer->def_select_group ('reports' => [qw(name affiliate)]);

CLASS METHODS

def_accessor ( $accessor_name, \%options )
Customer->def_accessor( 'id', { column => 'cust_id', auto_increment => 1 } );

Options (explained below):

column            => NAME
auto_increment    => BOOLEAN
select_when_null  => VALUE
update_when_empty => VALUE
select_trim       => BOOLEAN
update_trim       => BOOLEAN
string_mangle     => BOOLEAN
column => NAME

The column name in the database. The default is the accessor name.

auto_increment => BOOLEAN

The column value is generated by the database, and should not be INSERTED.

select_when_null => VALUE

Select VALUE when a column's value is NULL.

update_when_empty => VALUE

Use VALUE instead of the empty string for updates and inserts.

select_trim => BOOLEAN

Trim leading and trailing whitespace after selecting the value from the database.

update_trim => BOOLEAN

Trim leading and trailing whitespace before updating or inserting.

string_mangle => BOOLEAN

Apply all string mangling features to this column. This option is just a shortcut for:

{ select_trim => 1,
  update_trim => 1,
  select_when_null => '',
  update_when_empty => undef }