<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:13px"><div class="" id="yui_3_16_0_1_1436143183401_11514" dir="ltr">Hey all, I'm hoping someone can clarify for me an exception that get's thrown in Relationship::Base. I'm have multipurpose comments table that could be used for commenting on different kinds of objects in a schema. Rather than having individual join-tables to cement the relationships, I want to using a compound foreign key of object_type + object_id.</div><div class="" id="yui_3_16_0_1_1436143183401_11513"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_11512">Assume that I have:</div><div class="" id="yui_3_16_0_1_1436143183401_11511"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_9132"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9150"> TABLE post (</font></div><div class="" id="yui_3_16_0_1_1436143183401_9131"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11510"> 'id' int(11) NOT NULL AUTO_INCREMENT,</font></div><div class="" id="yui_3_16_0_1_1436143183401_9122"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11509"> 'text' varchar(3000),</font></div><div class="" id="yui_3_16_0_1_1436143183401_9123"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11508"> 'created_at' datetime NOT NULL,</font></div><div class="" id="yui_3_16_0_1_1436143183401_9124"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11594"> PRIMARY KEY ('id')</font></div><div class="" id="yui_3_16_0_1_1436143183401_9130"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11578"> )</font></div><div class="" id="yui_3_16_0_1_1436143183401_9125"><font face="Courier New, courier, monaco, monospace, sans-serif"><br class=""></font></div><div class="" id="yui_3_16_0_1_1436143183401_9129"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11595"> TABLE comment (</font></div><div class="" id="yui_3_16_0_1_1436143183401_9126"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11596"> 'id' int(11) NOT NULL AUTO_INCREMENT,</font></div><div class="" id="yui_3_16_0_1_1436143183401_9128"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11579"> 'object_type' varchar(32) NOT NULL,</font></div><div class="" id="yui_3_16_0_1_1436143183401_9127"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11597"> 'object_id' int(11) NOT NULL,</font></div><div class="" id="yui_3_16_0_1_1436143183401_9016"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11580"> 'text' varchar(3000),</font></div><div class="" id="yui_3_16_0_1_1436143183401_9017"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11507"> 'created_at' datetime NOT NULL,</font></div><div class="" id="yui_3_16_0_1_1436143183401_9018"><font face="Courier New, courier, monaco, monospace, sans-serif"> PRIMARY KEY ('id'),</font></div><div class="" id="yui_3_16_0_1_1436143183401_9121"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9154"> KEY 'object' ('object_type', 'object_id')</font></div><div class="" id="yui_3_16_0_1_1436143183401_9019"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9152"> )</font></div><div class="" id="yui_3_16_0_1_1436143183401_9120"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_9020">I have the Result class relationships built as follows using DBIx::Class::Relationship::Base's new-ish support for coderefs:</div><div class="" id="yui_3_16_0_1_1436143183401_9021"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_9031"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9115"> __PACKAGE__->has_many(</font></div><div class="" id="yui_3_16_0_1_1436143183401_9153"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_11581"> comments => '::Comment',</font></div><div class="" id="yui_3_16_0_1_1436143183401_9022"><font face="Courier New, courier, monaco, monospace, sans-serif"> sub {</font></div><div class="" id="yui_3_16_0_1_1436143183401_9023"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9133"> my $args = shift;</font></div><div class="" id="yui_3_16_0_1_1436143183401_9030"><font face="Courier New, courier, monaco, monospace, sans-serif"> return {</font></div><div class="" id="yui_3_16_0_1_1436143183401_9024"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9134"> "$args->{foreign_alias}.object_id" => { -ident => "$args->{self_alias}.id" },</font></div><div class="" id="yui_3_16_0_1_1436143183401_9025"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9119"> "$args->{foreign_alias}.object_type" => 'post',</font></div><div class="" id="yui_3_16_0_1_1436143183401_9026"><font face="Courier New, courier, monaco, monospace, sans-serif"> };</font></div><div class="" id="yui_3_16_0_1_1436143183401_9027"><font face="Courier New, courier, monaco, monospace, sans-serif"> }</font></div><div class="" id="yui_3_16_0_1_1436143183401_9028"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9117"> );</font></div><div class="" id="yui_3_16_0_1_1436143183401_9029"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_9155">But this throws the following exception:</div><div class="" id="yui_3_16_0_1_1436143183401_9032"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_9156"> <font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9181"> # DBIx::Class::Relationship::Base::new_related(): Custom relationship 'comments' does not resolve to a join-free condition fragment at ...</font></div><div class="" id="yui_3_16_0_1_1436143183401_9033"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_9034">Which comes from the <b id="yui_3_16_0_1_1436143183401_11730">new_related</b> method:</div><div class="" id="yui_3_16_0_1_1436143183401_9034"><br></div><div class="" id="yui_3_16_0_1_1436143183401_9118"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9165"> $self->throw_exception("Custom relationship '$rel' does not resolve to a join-free condition fragment")</font></div><div class="" id="yui_3_16_0_1_1436143183401_9035"><font face="Courier New, courier, monaco, monospace, sans-serif" id="yui_3_16_0_1_1436143183401_9167"> if $crosstable;</font></div><div class="" id="yui_3_16_0_1_1436143183401_9036"><br class=""></div><div class="" id="yui_3_16_0_1_1436143183401_9037">If I comment that check out, I can use the above has_many without issue. So I'm curious:</div><div class="" id="yui_3_16_0_1_1436143183401_9037"><br></div><div class="" id="yui_3_16_0_1_1436143183401_9038"> - What is that exception meant to overcome?</div><div dir="ltr" class="" id="yui_3_16_0_1_1436143183401_9039"> - Why must my relationship resolve to a "join-free" condition?</div></div></body></html>