[Catalyst] has_many but no left join?!

Robert Wohlfarth rbwohlfarth at gmail.com
Tue Jun 18 17:44:29 GMT 2013


On Tue, Jun 18, 2013 at 11:54 AM, Stephen Shorrock <
stephen.shorrock at gmail.com> wrote:
<snip>

> then (in Cat app)
> $c->model('MyApp::IndexStatus')->search_related('old_statuses');
>
> produces SQL something like:
> SELECT me.myindex, me.myoldindex, me.mystatus FROM index_statuses me  JOIN
> index_statuses old_statuses ON old_statuses.myindex =3D me.myoldindex:
>
> even adding {join_type=3D>'LEFT'} to the arguments of has_many does not
> produce a left join.
>

It looks like the code asks for "all MyApp::IndexStatus with matching
old_statuses records". That translates into an INNER JOIN.

If you're looking for "all MyApp::IndexStatus records along with any
related old_statuses records", try something like this:
foreach my $index_status ($c->model('MyApp::IndexStatus')->all) {
    # Generate the HTML here with columns from $index_status...
    foreach my $old_status ($index_status->old_statuses->all) {
        # Generate the HTML here for any $old_status records...
    }
}

-- =

Robert Wohlfarth
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20130618/2ce8a=
4b5/attachment.htm


More information about the Catalyst mailing list