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"><<a href="mailto:nelio.nunes@sapo.pt">nelio.nunes@sapo.pt</a>></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__->set_primary_key("id");<br>
__PACKAGE__->has_many(<br>
"links_relacionado",<br>
"SAPO::LinksRelacionados",<br>
{ "foreign.id_servico" => "<a href="http://self.id" target="_blank">self.id</a>" },<br>
);<br>
<br>
<br>
package SAPO::LinksRelacionados;<br>
(...)<br>
__PACKAGE__->set_primary_key("id");<br>
__PACKAGE__->belongs_to("id_servico", "SAPO::Servicos", { id => "id_servico" });<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 => "6969",<br>
semaforo => "zemaria",<br>
logotipo_servico => "logotipo.gif",<br>
link_servico => "<a href="http://um_link_qq" target="_blank">http://um_link_qq</a>",<br>
url_feed_rss => "<a href="http://um_rss_qq" target="_blank">http://um_rss_qq</a>",<br>
title => "da-lhe duro",<br>
semaforo_destacado => 1,<br>
destacar_no_servico => 1,<br>
links_relacionado => [<br>
{ id => '293874', nome => "ola maria", url => "<a href="http://um_url_qq" target="_blank">http://um_url_qq</a>" },<br>
{ id => '293875', nome => "ola maria", url => "<a href="http://um_url_qq" target="_blank">http://um_url_qq</a>" }<br>
],<br>
<br>
};<br>
<br>
$schema->resultset('Servicos')->update_or_create($servicox, {id => "6969"});<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 '293874' for key 1 [for Statement "INSERT INTO Links_relacionados ( id, id_servico, nome, url) VALUES ( ?, ?, ?, ? )" with ParamValues: 0='293874', 1='6969', 2='ola maria', 3='<a href="http://um_url_qq" target="_blank">http://um_url_qq</a>']<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>
[]'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>