Nélio, <br><br>As tabelas estão criadas no banco com o Cascade?<br><br>Não sei como o Dbix Class lida com isto, mas de repente o mysql já inseriu e o dbix-class tá tentando inserir novamente.<br><br>Márcio Vitor<br><br><div class="gmail_quote">
2009/4/16 Nélio Nunes <span dir="ltr">&lt;<a href="mailto:nelio.nunes@sapo.pt">nelio.nunes@sapo.pt</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Caros,<br>
<br>
Ando aqui com um problema bicudo em que os ninjas do DBIx::Class poderão me ajudar, espero:<br>
<br>
Tenho 2 tabelas, uma principal, outra secundaria, com uma relação one to many de uma para a outra.<br>
<br>
a tabela principal é qq coisa deste género: (output do show create)<br>
<br>
CREATE TABLE `Servicos` (<br>
  `id` int(11) NOT NULL,<br>
  `semaforo` varchar(255) NOT NULL,<br>
   (...)<br>
  PRIMARY KEY  (`id`)<br>
) ENGINE=InnoDB DEFAULT CHARSET=utf8<br>
<br>
a tabela secundária é isto:<br>
<br>
CREATE TABLE `Links_relacionados` (<br>
  `id` int(11) NOT NULL,<br>
  `nome` varchar(255) NOT NULL,<br>
  `url` varchar(255) NOT NULL,<br>
  `id_servico` int(11) NOT NULL,<br>
  PRIMARY KEY  (`id`),<br>
  KEY `id_servico` (`id_servico`),<br>
  CONSTRAINT `servicos_fk` FOREIGN KEY (`id_servico`) REFERENCES `Servicos` (`id`) ON DELETE CASCADE ON UPDATE CASCADE<br>
) ENGINE=InnoDB DEFAULT CHARSET=utf8<br>
<br>
<br>
nas classes DBIx relativas ás duas tabelas, tenho o seguinte:<br>
<br>
package SAPO::Servicos;<br>
(...)<br>
__PACKAGE__-&gt;set_primary_key(&quot;id&quot;);<br>
__PACKAGE__-&gt;has_many(<br>
  &quot;links_relacionado&quot;,<br>
  &quot;SAPO::LinksRelacionados&quot;,<br>
  { &quot;foreign.id_servico&quot; =&gt; &quot;<a href="http://self.id" target="_blank">self.id</a>&quot; },<br>
);<br>
<br>
<br>
package SAPO::LinksRelacionados;<br>
(...)<br>
__PACKAGE__-&gt;set_primary_key(&quot;id&quot;);<br>
__PACKAGE__-&gt;belongs_to(&quot;id_servico&quot;, &quot;SAPO::Servicos&quot;, { id =&gt; &quot;id_servico&quot; });<br>
<br>
Agora, quando é que isto estoura:<br>
<br>
Quando se tenta fazer um create_or_update com a seguinte estrutura:<br>
<br>
my $servicox = {<br>
    id                  =&gt; &quot;6969&quot;,<br>
    semaforo            =&gt; &quot;zemaria&quot;,<br>
    logotipo_servico    =&gt; &quot;logotipo.gif&quot;,<br>
    link_servico        =&gt; &quot;<a href="http://um_link_qq" target="_blank">http://um_link_qq</a>&quot;,<br>
    url_feed_rss        =&gt; &quot;<a href="http://um_rss_qq" target="_blank">http://um_rss_qq</a>&quot;,<br>
    title               =&gt; &quot;da-lhe duro&quot;,<br>
    semaforo_destacado  =&gt; 1,<br>
    destacar_no_servico =&gt; 1,<br>
    links_relacionado   =&gt; [<br>
        { id =&gt; &#39;293874&#39;, nome =&gt; &quot;ola maria&quot;, url =&gt; &quot;<a href="http://um_url_qq" target="_blank">http://um_url_qq</a>&quot; },<br>
        { id =&gt; &#39;293875&#39;, nome =&gt; &quot;ola maria&quot;, url =&gt; &quot;<a href="http://um_url_qq" target="_blank">http://um_url_qq</a>&quot; }<br>
    ],<br>
<br>
};<br>
<br>
$schema-&gt;resultset(&#39;Servicos&#39;)-&gt;update_or_create($servicox, {id =&gt; &quot;6969&quot;});<br>
<br>
Na primeira inserção, tudo corre bem, quando se tenta alterar alguma coisa e executar novamente, dá um erro de DBI:<br>
<br>
DBIx::Class::ResultSet::update_or_create(): DBI Exception: DBD::mysql::st execute failed: Duplicate entry &#39;293874&#39; for key 1 [for Statement &quot;INSERT INTO Links_relacionados ( id, id_servico, nome, url) VALUES ( ?, ?, ?, ? )&quot; with ParamValues: 0=&#39;293874&#39;, 1=&#39;6969&#39;, 2=&#39;ola maria&#39;, 3=&#39;<a href="http://um_url_qq" target="_blank">http://um_url_qq</a>&#39;]<br>

<br>
O comportamento do update_or_create não se deveria estar a propagar pelas tabelas relacionadas?<br>
<br>
Alguém tem ideia do que é que pode estar a acontecer aqui?<br>
<br>
<br>
[]&#39;s<br>
<br>
Nélio<br>
_______________________________________________<br>
Cascavel-pm mailing list<br>
<a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
</blockquote></div><br>