package My::User;
use base 'My::ClassDBI';
__PACKAGE__->table ('user');
__PACKAGE__->columns ( All => qw( uid name login ) );
__PACKAGE__->has_many( 'capabilities', 'My::UserCapability' => 'user' );
###
package My::Capability;
use base 'My::ClassDBI';
__PACKAGE__->table ('capability');
__PACKAGE__->columns ( All => qw( capid name default ) );
__PACKAGE__->has_many( 'users', 'My::UserCapability' => 'capability' );
###
package My::UserCapability;
use base 'My::ClassDBI';
__PACKAGE__->table ('user_capability');
# note the added primary key idx
__PACKAGE__->columns ( All => qw( idx user capability ) );
__PACKAGE__->has_a( 'user' => 'My::User' );
__PACKAGE__->has_a( 'capability' => 'My::Capability' );
####
foreach ( $user->capabilities() ) {
print $_->capability->name(), "\n";
}
##
##
foreach ( $capability->users() ) {
print $_->user->name(), "\n";
}
##
##
sub get_capabilities {
my ( $self ) = @_;
my @capabilities = $self->capabilities();
return map { $_->capability->name() } @capabilities;
}