#!/usr/bin/perl
use Class::DBI;
package MyPackage;
use base ('Class::DBI');
FsDBI->set_db('Main', 'DBI:mysql:databasename', 'user', 'password');
package MyPackage::user;
use base ('MyPackage');
MyPackage::User->table('user');
MyPackage::User->columns(Essential => qw(id role_id name lastname));
MyPackage::User ->has_a (role_id => 'FsDBI::role');
package MyPackage::role;
use base ('MyPackage');
MyPackage::role->table('role');
MyPackage::role->columns(Essential => qw(id role_title));
####
#!/usr/bin/perl
use MyPackage;
my $testuser=MyPackage::user->retrieve(1);
print "user with id 1 is $testuser \";
print "\n";
print "user with id 1 has role $testuser->role_id(1)";
####
#!/usr/bin/perl
use Class::DBI;
package MyPackageO2M;
use base ('Class::DBI');
FsDBI->set_db('Main', 'DBI:mysql:databasename', 'user', 'password');
package MyPackage::Tester;
use base ('MyPackageO2M');
MyPackage::Tester->table('user');
MyPackage::Tester->columns(Essential => qw(id role_id name lastname));
# see the difference: the method name (ihavesomuchroles) can be completely different to the database-table.
# which means in a 1:m situation, even the Classes can have different names than the originating database-tables.
# (MyPackage::user VS MyPackage::Tester)
MyPackage::Tester ->has_many (ihavesomuchroles => 'MyPackage::role','id');
# the 'id' argument to 'ihavesomuchroles' is the destination field for MyPackage::role
package MyPackage::role;
use base ('MyPackage');
MyPackage::role->table('role');
MyPackage::role->columns(Essential => qw(id role_title));
####
#!/usr/bin/perl
use MyPackageO2M;
my $testuser=MyPackage::user->retrieve(1);
print "user with id 1 is $testuser \n";
print "and has roles:\n";
@roles=$testuser->ihavesomuchroles;
foreach my $temp (@roles)
{ print "role: $temp->id."and".$temp->role_title."\n";}