On 9/12/2013 12:41 PM, Andrew Beverley wrote:
My database has a table that has 2 other "has many" tables related to
it, best described by this diagram:

http://files.andybev.com/schema.png

I want to select from the "task" table, joining both other tables at the
same time. In order for the joins to work correctly, in raw SQL I would
use 2 conditions for the join of the "issue" table:

"issues.task_id = me.id AND issues.site_id = site_tasks.site_id"

However, by default, DBIx::Class only uses the first condition, as per
my relationship definitions. How can I add the second condition?

Argh. I Promised to be less angry next year and not be an older version of MST. <Less hair you know> http://search.cpan.org/~ribasushi/DBIx-Class-0.08250/lib/DBIx/Class/Relationship.pm <http://search.cpan.org/%7Eribasushi/DBIx-Class-0.08250/lib/DBIx/Class/Relationship.pm>

and of course:

http://search.cpan.org/~ribasushi/DBIx-Class-0.08250/lib/DBIx/Class/Manual/Joining.pod <http://search.cpan.org/%7Eribasushi/DBIx-Class-0.08250/lib/DBIx/Class/Manual/Joining.pod>

So RFTM. You need to define your joins in you classes. Schema loader stuff will only do what you reasonably, intelligently put in your initial DDL on the SQL side. And you probably didn't. So * DO IT RIGHT IN YOUR CODE *




I have tried adding a second join condition to the relationship
definition, but as far as I can tell only the 2 immediate tables can be
specified.

FWIW, the full SQL statement I am trying to execute is as follows:

    SELECT MAX( issue.completed ) AS max, period_qty
      FROM task me
LEFT JOIN site_task ON site_task.task_id = me.id
LEFT JOIN site      ON site.id = site_task.site_id
LEFT JOIN issue     ON issue.task_id = me.id
                    AND issue.site_id = site_task.site_id   <== Need this
     WHERE period_unit = 'week'
  GROUP BY site_task.id
    HAVING max < DATE_SUB(NOW(), INTERVAL period_qty week)

The values selected are not always correct without the second join
condition.

Thanks,

Andy



_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk


---
This email is free from viruses and malware because avast! Antivirus protection 
is active.
http://www.avast.com


_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk

Reply via email to