Doctrina autorreferenciados no está funcionando en Symfony 1.4 al actualizar o borrar
-
25-09-2019 - |
Pregunta
Estoy tratando de construir un modelo para las páginas de contenido en mi sitio, y me dio una autorreferencia llamado 'página Relacionada'. Ahora bien, si construyo mis modelos y tratar de crear una nueva página en el Generador de Administración todo funciona bien. Si me dan la página de una página relacionada (o más) que trabaja muy bien también, pero si voy a la otra página y tratar de editar las referencias Symfony accidentes:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-2' for key 'PRIMARY'
he comprobado en phpmyadmin y notado que en la tabla de asociación tengo 2 ids (ID1 e ID2) y sólo la primera ID es un enlace:
(lo siento, no pude pegar un vínculo)
He intentado dar un campo 'id' de la tabla de asociación, así que tenía 3 campos (ID, ID1, ID2), y vi que cuando actualizo las relaciones en la otra página (página 2 a la Página 1 y página 2 a page3 ), que es la creación de las relaciones de esa página (página 2 a la página 1 y página 3) y que está eliminando las viejas relaciones (que era page1 a page2 y page1 a página 3) y las relaciones finales que tengo en la tabla de asociación es page1 a la página 1 (???) página 2 a page1 y page2 a page3.
Mis modelos son:
Page:
//...
relations:
RelatedPages:
class: Page
local: id1
foreign: id2
refClass: RelatedPage
equal: true
RelatedPage:
columns:
id1:
type: integer(4)
primary: true
unsigned: true
notnull: true
id2:
type: integer(4)
primary: true
unsigned: true
notnull: true
Estoy usando el generador de administración de Symfony. ¿Tengo que escribir código para manejar esto, o estoy haciendo algo mal?
he comprobado la documentación de la doctrina: texto del enlace
y parece que todo está bien.
Solución 2
Otros consejos
Es necesario añadir onDelete: CASCADE
a la relación RelatedPages
.
Aquí está el error de Symfony: http://trac.symfony-project.org/ticket/6273
edem solución no está funcionando para mí.
Esta es mi solución.
Escribir esto en lib / model / RelatedPage.class.php
class RelatedPage extends BaseRelatedPage
{
public function save(Doctrine_Connection $conn = null)
{
if ($this->isNew() !== true && $this->getId1() == $this->getId2()) {
return;
}//end if
return parent::save($conn);
}//end save()
}//end class