Re: [CDBI] Many to many help
        
        
        [prev]
        [thread]
        [next]
        
        [Date index for 2005/08/01]
        
        
        
        
        
On 1 Aug 2005, at 09:38, Mike McKay wrote:
> I need some help with a Many to Many situation. I have two tables,  
> passenger and route, which are in a many to many relationship via a  
> PassengerRouteJoin table. I followed the perldoc for Class::DBI to  
> create the many to many relationship using inflation. But it  
> doesn't work. Here is basically what I am doing:
>
> PassengerRouteJoin->has_a(passenger => "Passenger");
> PassengerRouteJoin->has_a(route => "Route");
>
> Route->has_many(passengers => [ "PassengerRouteJoin" =>  
> 'passenger' ]);
> Passenger->has_many(routes => [ "PassengerRouteJoin" => 'route' ]);
>
> So then I try and do this:
>
> my $p = Passenger->create({surname => "Blah", first_name => "Foo"});
> my $r = Route->create({departure_point => "Lilongwe", destination  
> => "Likoma"});
>
> $p->add_to_routes({route => $r});
At the moment this won't work because Passenger has no routes() or  
add_to_routes() method: they're both in the PassengerRouteJoin class  
that declared the has_many method. There are a few ways around this:
1. You just spell it out:
     my $p = Passenger->create({surname => "Blah", first_name =>  
"Foo"});
     my $r = Route->create({departure_point => "Lilongwe",  
destination => "Likoma"});
     my $pr = PassengerRouteJoin->create({passenger => $p, route =>  
$r});
2. you use the mapping syntax to put the routes() method in the  
Passenger class where you want it:
     Passenger->has_many(routes => [ 'PassengerRouteJoin' => 'route' ]);
in which case $p->add_to_routes({...}) should work. Incidentally,  
don't create the route object before you pass it in: add_to_foo  
always calls create(), so you'll get duplicates.
3. But unless PassengerRouteJoin is a completely empty apart from the  
linking information, you'll probably end up writing a custom  
add_route method in the Passenger class that will look a lot like [1]  
above but with more going on. You could consider getting it over with  
now.
hth
will
_______________________________________________
ClassDBI mailing list
ClassDBI@xxxxx.xxxxxxxxxxxxxxxx.xxx
http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi
        
     
    
    
        
    
|  |  | 
	
	   
	
		
		
		Re: [CDBI] Many to many help
		
		William Ross 09:16 on 01 Aug 2005
 |