Salve monges.<div><br></div><div><br></div><div>Tenho no meu esquema duas classes que representam as tabelas, conforme abaixo:</div><div><br></div><div>&lt;tabela 1&gt;</div><div><br></div><div><div>package Scap2::DBIC::Schema::Spider_Info;</div>
<div><br></div><div>use strict;</div><div>use warnings;</div><div><br></div><div>use base &#39;DBIx::Class&#39;;</div><div><br></div><div>__PACKAGE__-&gt;load_components(&quot;Core&quot;);</div><div>__PACKAGE__-&gt;table(&quot;spider_info&quot;);</div>
<div>__PACKAGE__-&gt;add_columns(</div><div>  &quot;spider_id&quot;,</div><div>  { data_type =&gt; &quot;INTEGER&quot;, is_nullable =&gt; 0, size =&gt; undef },</div><div>  &quot;spider_name&quot;,</div><div>  { data_type =&gt; &quot;VARCHAR&quot;, is_nullable =&gt; 0, size =&gt; undef },</div>
<div>  &quot;curr_process&quot;,</div><div>  { data_type =&gt; &quot;INTEGER&quot;, is_nullable =&gt; 0, size =&gt; undef },</div><div>  &quot;start_time&quot;,</div><div>  { data_type =&gt; &quot;DATE&quot;, is_nullable =&gt; 0, size =&gt; undef },</div>
<div>  &quot;end_time&quot;,</div><div>  { data_type =&gt; &quot;DATE&quot;, is_nullable =&gt; 0, size =&gt; undef },</div><div>  &quot;total_time&quot;,</div><div>  { data_type =&gt; &quot;DATE&quot;, is_nullable =&gt; 0, size =&gt; undef },</div>
<div>  &quot;parser_time&quot;,</div><div>  { data_type =&gt; &quot;DATE&quot;, is_nullable =&gt; 0, size =&gt; undef },</div><div>  &quot;amount&quot;,</div><div>  { data_type =&gt; &quot;INTEGER&quot;, is_nullable =&gt; 0, size =&gt; undef },</div>
<div>  &quot;amount_real&quot;,</div><div>  { data_type =&gt; &quot;INTEGER&quot;, is_nullable =&gt; 0, size =&gt; undef },</div><div>  &quot;status&quot;,</div><div>  { data_type =&gt; &quot;INTEGER&quot;, is_nullable =&gt; 0, size =&gt; undef },</div>
<div>  &quot;executed&quot;,</div><div>  { data_type =&gt; &quot;INTEGER&quot;, is_nullable =&gt; 0, size =&gt; undef },</div><div><br></div><div>);</div><div>__PACKAGE__-&gt;set_primary_key(&quot;spider_name&quot;);</div>
<div>#__PACKAGE__-&gt;has_many(name =&gt; &quot;Scap2::DBIC::Schema::Job&quot;);</div><div>__PACKAGE__-&gt;has_many(threads =&gt; &#39;Scap2::DBIC::Schema::ThreadList&#39;,&#39;spider_name&#39;);</div></div><div><br></div>
<div><br></div><div>&lt;/tabela 1&gt;</div><div><br></div><div><br></div><div>&lt;tabela 2&gt;</div><div><div>package Scap2::DBIC::Schema::ThreadList;</div><div><br></div><div>use strict;</div><div>use warnings;</div><div>
<br></div><div>use base &#39;DBIx::Class&#39;;</div><div><br></div><div>__PACKAGE__-&gt;load_components(&quot;Core&quot;);</div><div>__PACKAGE__-&gt;table(&quot;thread_list&quot;);</div><div>__PACKAGE__-&gt;add_columns(</div>
<div>  &quot;thread_id&quot;,</div><div>  { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=&gt; &quot;integer&quot;, default_value =&gt; undef, is_nullable =&gt; 0, size =&gt; 20 },</div><div><br>
</div><div>  &quot;spider_name&quot;,</div><div>  { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=&gt; &quot;text&quot;, default_value =&gt; undef, is_nullable =&gt; 0, size =&gt; 100 },</div><div>
<br></div><div>  &quot;ospid&quot;,</div><div>  { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=&gt; &quot;integer&quot;, default_value =&gt; undef, is_nullable =&gt; 0, size =&gt; 20 },</div><div>
<br></div><div> &quot;syspid&quot;,</div><div>  { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=&gt; &quot;integer&quot;, default_value =&gt; undef, is_nullable =&gt; 0, size =&gt; 20 },</div><div>
<br></div><div>  </div><div><br></div><div>);</div><div><br></div><div>__PACKAGE__-&gt;set_primary_key(&#39;ospid&#39;);</div><div>#__PACKAGE__-&gt;belongs_to(spider_info =&gt;&#39;Scap2::DBIC::Schema::Spider_Info&#39;,&#39;spider_name&#39;);</div>
<div>__PACKAGE__-&gt;belongs_to(spider_info =&gt;&#39;Scap2::DBIC::Schema::Spider_Info&#39; =&gt;  {&#39;foreign.spider_name&#39; =&gt; &#39;self.spider_name&#39; } );</div><div><br></div></div><div><br></div><div>&lt;/tabela2&gt;<br clear="all">
<br></div><div><br></div><div><br></div><div>Esses relacionamentos estão ok(não tá gerando erro pelo menos, e quando eu uso DBI_TRACE o join está correto!)</div><div><br></div><div><br></div><div>A minha pesquisa utilizando essa relação, se resume no seguinte trecho de código:</div>
<div><br></div><div><br></div><div>&lt;pesquisa&gt;</div><div><br></div><div><div>sub load_all {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my ( $self ) = @_;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my @resultset = undef;</div>
<div>#<span class="Apple-tab-span" style="white-space:pre">        </span>eval{@resultset = $self-&gt;schema-&gt;resultset(&#39;ThreadList&#39;)-&gt;related_resultset(&#39;spider_info&#39;)-&gt;all };</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>eval{@resultset = $self-&gt;schema-&gt;resultset(&#39;ThreadList&#39;)-&gt;search_related(&#39;spider_info&#39;,{});</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>eval{@resultset = $self-&gt;schema-&gt;resultset(&#39;Spider_Info&#39;)-&gt;search({},{join =&gt; &#39;threads&#39;});</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>};</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if($@){</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print &quot;\n\nOOOPS! Nao consegui montar a lista de threads --- $@\n\n&quot;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}else {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>my @list = ();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$self-&gt;thread_list(\@resultset);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>        print Dumper $self-&gt;thread_list;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return $self-&gt;thread_list;</div>
<div>}</div></div><div><br></div><div>&lt;/pesquisa&gt;</div><div><br></div><div><br></div><div>Minha pergunta é: Por que o DBIx::Class não inclui as colunas das duas tabelas envolvidas no relacionamento?</div><div><br></div>
<div>SQL gerada pelo DBI_TRACE:</div><div><br></div><div>SELECT me.spider_id, me.spider_name, me.curr_process, me.start_time, me.end_time, me.total_time, me.parser_time, me.amount, me.amount_real, me.status, me.executed FROM spider_info me LEFT JOIN thread_list threads ON threads.spider_name = me.spider_name</div>
<div><br></div><div><br></div><div><br></div><div>Thx!</div><div><br></div><div><br></div><div><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>
</div>