<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. &nbsp;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">&nbsp; 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">&nbsp; &nbsp; '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">&nbsp; &nbsp; '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">&nbsp; &nbsp; '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">&nbsp; &nbsp; 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">&nbsp; )</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">&nbsp; 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">&nbsp; &nbsp; '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">&nbsp; &nbsp; '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">&nbsp; &nbsp; '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">&nbsp; &nbsp; '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">&nbsp; &nbsp; '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">&nbsp; &nbsp; 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">&nbsp; &nbsp; 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">&nbsp; )</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">&nbsp; __PACKAGE__-&gt;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">&nbsp; &nbsp; comments =&gt; '::Comment',</font></div><div class="" id="yui_3_16_0_1_1436143183401_9022"><font face="Courier New, courier, monaco, monospace, sans-serif">&nbsp; &nbsp; 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">&nbsp; &nbsp; &nbsp; my $args = shift;</font></div><div class="" id="yui_3_16_0_1_1436143183401_9030"><font face="Courier New, courier, monaco, monospace, sans-serif">&nbsp; &nbsp; &nbsp; 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">&nbsp; &nbsp; &nbsp; &nbsp; "$args-&gt;{foreign_alias}.object_id" &nbsp; =&gt; { -ident =&gt; "$args-&gt;{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">&nbsp; &nbsp; &nbsp; &nbsp; "$args-&gt;{foreign_alias}.object_type" =&gt; 'post',</font></div><div class="" id="yui_3_16_0_1_1436143183401_9026"><font face="Courier New, courier, monaco, monospace, sans-serif">&nbsp; &nbsp; &nbsp; };</font></div><div class="" id="yui_3_16_0_1_1436143183401_9027"><font face="Courier New, courier, monaco, monospace, sans-serif">&nbsp; &nbsp; }</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">&nbsp; );</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">&nbsp;<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">&nbsp; &nbsp; $self-&gt;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">&nbsp; &nbsp; &nbsp; 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">&nbsp; - What is that exception meant to overcome?</div><div dir="ltr" class="" id="yui_3_16_0_1_1436143183401_9039">&nbsp; - Why must my relationship resolve to a "join-free" condition?</div></div></body></html>