[Dbix-class] Retrieving join table info from many_to_many

Jess Robinson castaway at desert-island.me.uk
Mon Feb 18 12:47:49 GMT 2008


Hi Paul,

On Sun, 17 Feb 2008, Paul Makepeace wrote:

> I have two tables of things, user and widget. I have a join table
> user_widget and have set up the DBIC bits so I can say @widgets =
> $user->widgets(). Now, for each of @widgets I actually want a piece of
> info in user_widgets, color (i.e. each user can customize the
> appearance of their widget).

An m2m bridge is essentially a way to skip the link table and jump 
straight to the other side of it. If you want data from the link table, 
then use the link table rel?

I assume your user has a has_many rel to user_widget, so replace :
   my @widgets :Stashed = $user->widgets;
with
   my @widgets :Stashed = $user->link_widgets;
And use $linkwidget.color, linkwidget.widget.name etc

To prefetch:
   my $widgets_rs :Stashed = $user->link_widgets->search({}, { prefetch => 
'widget' });

> Is there any way to get that (ideally prefetched) color from the join
> table, given a $bar? Or do I have to get a list of the join table
> entries prefetching widget and then iterate over that?
>
> I'm aiming for, e.g.,
>
>  my @widgets :Stashed = $user->widgets;
>
>  [% FOREACH widget = widgets %]
>   <td>[% widget.name %] has color [% widget.[magic here?].color %]</td>
>  [% END %]
>

Jess



More information about the DBIx-Class mailing list