[Cascavel-pm] Exemplo de relacao many-to-many com Class::DBI
Rod Za
rodzadra em yahoo.com
Sexta Abril 8 10:16:38 PDT 2005
Olá a todos,
Alguém poderia me ajudar a compreender como criar (corretamente) uma relacao many-to-many com
Class::DBI?
Eu queria trabalhar com a seguinte tabela como exemplo (assim ficaria bom para outros
consultarem):
+---------+ +-------------+
| users | | groups |
+---------+ +-------------+
|*id_user |-+ +--| *id_group |
| login | | | | group_name |
+---------+ | | +-------------+
| |
+--------+ |
| +------------+
| +---------------+ |
| | relationship | |
| +---------------+ |
+---<| *id_user | |
| *id_group |>---+
+---------------+
| |
| |
/|\ /|\
+-----------------+ +--------------+
| history | | action |
+-----------------+ +--------------+
| *id_user | | *id_action |
| *id_group | +--| action |
| id_action |--+ +--------------+
| date |
+-----------------+
Eu criei as classes (ver abaixo) mas não sei como acessar o historico de um usuario/grupo.
muito obrigado,
Rodrigo
<code>
package dbBase;
use base qw/Class::DBI/;
use base qw(Class::DBI);
__PACKAGE__->set_db( "Main", "dbi:mysql:Test", "TEST_USER", "TESTPASS" );
1;
package dbUser;
use lib '/home/rodza/perl_tests';
use base 'dbBase';
dbUser->table('users');
dbUser->columns( All => qw/id_user login/ );
dbUser->has_many( groups => [dbRelationship => 'id_group'] => 'id_user' );
1;
package dbGroup;
use lib '/home/rodza/perl_tests';
use base 'dbBase';
dbGroup->table('groups');
dbGroup->columns( All => qw/id_group group_name/ );
1;
package dbRelationship;
use lib '/home/rodza/perl_tests';
use base 'dbBase';
dbRelationship->table('relationship');
dbRelationship->columns( All => qw/id_user id_group/ );
dbRelationship->has_a( id_group => dbGroup );
dbRelationship->has_a( id_user => dbUser );
dbRelationship->has_many( history => dbHistory => 'id_user' );
1;
package dbHistory;
use lib '/home/rodza/perl_tests';
use base 'dbBase';
dbHistory->table('history');
dbHistory->columns( All => qw/id_user id_group action date/ );
dbHistory->has_a( id_action => dbAction );
1;
package dbAction;
use lib '/home/rodza/perl_tests';
use base 'dbBase';
dbAction->table('action');
dbAction->columns( All => qw/id_action action/ );
1;
package main;
use dbUser;
my ($info) = dbUser->retrieve(1);
foreach($info){
printf "UID: %d LOGIN: %S\nGID: %D GROUP_NAME: %S",
$info->id_user, $info->login;
}
</code>
__________________________________
Do you Yahoo!?
Yahoo! Personals - Better first dates. More second dates.
http://personals.yahoo.com
Mais detalhes sobre a lista de discussão Cascavel-pm