[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