Hello,

Can someone help me with this? I'm trying to make the use of Class::DBI and i 
need to do a
many-to-many relationship. (an user has many groups and a group has many users, 
and an user with a
group has many history.) 

I think what i make was correct, i can access the group_name value of the 
relationship
(users->groups), but i can access the history of that USER with that GROUP. 

below is my tables and the classes that i make.

Thank you very much, any way.

Rodrigo Zadra.


<table>
+---------+        +-------------+
|  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        |  
       +-----------------+
</table>

and this classes defined:

<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/ );
dbUser->has_many( users => [dbRelationship => 'id_user'] => 'id_group' );
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 );
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, $info->id_group->group_name;
}
</code>



                
__________________________________ 
Do you Yahoo!? 
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to