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><tabela 1></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 'DBIx::Class';</div><div><br></div><div>__PACKAGE__->load_components("Core");</div><div>__PACKAGE__->table("spider_info");</div>
<div>__PACKAGE__->add_columns(</div><div> "spider_id",</div><div> { data_type => "INTEGER", is_nullable => 0, size => undef },</div><div> "spider_name",</div><div> { data_type => "VARCHAR", is_nullable => 0, size => undef },</div>
<div> "curr_process",</div><div> { data_type => "INTEGER", is_nullable => 0, size => undef },</div><div> "start_time",</div><div> { data_type => "DATE", is_nullable => 0, size => undef },</div>
<div> "end_time",</div><div> { data_type => "DATE", is_nullable => 0, size => undef },</div><div> "total_time",</div><div> { data_type => "DATE", is_nullable => 0, size => undef },</div>
<div> "parser_time",</div><div> { data_type => "DATE", is_nullable => 0, size => undef },</div><div> "amount",</div><div> { data_type => "INTEGER", is_nullable => 0, size => undef },</div>
<div> "amount_real",</div><div> { data_type => "INTEGER", is_nullable => 0, size => undef },</div><div> "status",</div><div> { data_type => "INTEGER", is_nullable => 0, size => undef },</div>
<div> "executed",</div><div> { data_type => "INTEGER", is_nullable => 0, size => undef },</div><div><br></div><div>);</div><div>__PACKAGE__->set_primary_key("spider_name");</div>
<div>#__PACKAGE__->has_many(name => "Scap2::DBIC::Schema::Job");</div><div>__PACKAGE__->has_many(threads => 'Scap2::DBIC::Schema::ThreadList','spider_name');</div></div><div><br></div>
<div><br></div><div></tabela 1></div><div><br></div><div><br></div><div><tabela 2></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 'DBIx::Class';</div><div><br></div><div>__PACKAGE__->load_components("Core");</div><div>__PACKAGE__->table("thread_list");</div><div>__PACKAGE__->add_columns(</div>
<div> "thread_id",</div><div> { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=> "integer", default_value => undef, is_nullable => 0, size => 20 },</div><div><br>
</div><div> "spider_name",</div><div> { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=> "text", default_value => undef, is_nullable => 0, size => 100 },</div><div>
<br></div><div> "ospid",</div><div> { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=> "integer", default_value => undef, is_nullable => 0, size => 20 },</div><div>
<br></div><div> "syspid",</div><div> { data_type <span class="Apple-tab-span" style="white-space:pre">                </span>=> "integer", default_value => undef, is_nullable => 0, size => 20 },</div><div>
<br></div><div> </div><div><br></div><div>);</div><div><br></div><div>__PACKAGE__->set_primary_key('ospid');</div><div>#__PACKAGE__->belongs_to(spider_info =>'Scap2::DBIC::Schema::Spider_Info','spider_name');</div>
<div>__PACKAGE__->belongs_to(spider_info =>'Scap2::DBIC::Schema::Spider_Info' => {'foreign.spider_name' => 'self.spider_name' } );</div><div><br></div></div><div><br></div><div></tabela2><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><pesquisa></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->schema->resultset('ThreadList')->related_resultset('spider_info')->all };</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>eval{@resultset = $self->schema->resultset('ThreadList')->search_related('spider_info',{});</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>eval{@resultset = $self->schema->resultset('Spider_Info')->search({},{join => 'threads'});</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 "\n\nOOOPS! Nao consegui montar a lista de threads --- $@\n\n"</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->thread_list(\@resultset);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div> print Dumper $self->thread_list;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return $self->thread_list;</div>
<div>}</div></div><div><br></div><div></pesquisa></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>