Problemas con delete cascade

7 views
Skip to first unread message

David Castelló

unread,
Jan 7, 2010, 6:36:55 AM1/7/10
to symfony-es
Hola!
En un proyecto symfony dispongo de cursos los cuales están formados
por alumnos. Cada vez que borro un curso se borran automáticamente
todos los alumnos de éste ya que tengo un "delete cascade".
Mi problema es que lo alumnos tienen asociada una foto, es decir,
tengo un atributo con el path hacia la foto.
El delete cascade me borra todos los alumnos pero se mantiene la foto
en el sistema. ¿cómo solventais este problema?.

La primera solución que se me ocurre es sobreescribir el método delete
del objeto curso para:
1) hacer un bucle for para recorrer todos los alumnos del curso y
almacenar en un array todos los path a los ficheros
2) si el borrado en cascada ha ido bien, proceder a borrar todas las
fotos del sistema almacenadas en el array

¿Hay alguna otra forma más elegante?

Saludos!

Pancho

unread,
Jan 7, 2010, 7:20:15 AM1/7/10
to symfony-es
podes sobreescribir la accion delete, te puede quedar mas prolijo y
que el metodo delete del objeto se encargue solamente de borrar el
registro de la DB.

David Castelló

unread,
Jan 7, 2010, 8:35:05 AM1/7/10
to symfony-es
Hola Pancho!
¿A qué te refieres con sobreescribir la accion delete, qué pretendes
hacer ahí?
Otra cosa que he pensado es eliminar el "ondelete cascade" en la base
de datos y hacer por codigo el delete cascade dentro del metodo delete
del objeto curso, pero no me gusta este método.

Rodrigo Ruiz Fuentes

unread,
Jan 7, 2010, 9:06:50 AM1/7/10
to symfo...@googlegroups.com
El 07/01/2010 8:36, David Castell� escribi�:
> Hola!
> En un proyecto symfony dispongo de cursos los cuales est�n formados
> por alumnos. Cada vez que borro un curso se borran autom�ticamente
> todos los alumnos de �ste ya que tengo un "delete cascade".

> Mi problema es que lo alumnos tienen asociada una foto, es decir,
> tengo un atributo con el path hacia la foto.
> El delete cascade me borra todos los alumnos pero se mantiene la foto
> en el sistema. �c�mo solventais este problema?.
>
> La primera soluci�n que se me ocurre es sobreescribir el m�todo delete

> del objeto curso para:
> 1) hacer un bucle for para recorrer todos los alumnos del curso y
> almacenar en un array todos los path a los ficheros
> 2) si el borrado en cascada ha ido bien, proceder a borrar todas las
> fotos del sistema almacenadas en el array
>
> �Hay alguna otra forma m�s elegante?
>
> Saludos!
>

�Qu� motor de base de datos est�s usando?
Siempre puedes sobreescribir la accion, para que primero borre el
archivo y luego contin�e con parent::delete()


--
Rodrigo Ruiz Fuentes

David Castelló

unread,
Jan 7, 2010, 10:37:54 AM1/7/10
to symfony-es
Hola Rodrigo!
Mysql con InnoDb.
Según estoy entendiendo cuando ejecuto el $curso->delete(), esto
provoca un borrado del objeto y del registro correspondiente en la
base de datos. Los alumnos relacionados no se están borrando a nivel
de aplicación sino a nivel de base de datos, es decir, es mysql quien
hace el borrado en cascada.
Voy a sobrescribir el método delete del objeto curso tal y como
indicaba en el primer mensaje.

Saludos!

Pancho

unread,
Jan 7, 2010, 10:49:31 AM1/7/10
to symfony-es
yo trabajo mucho con la version 1.1 y 1.0 de symfony, y en la cache te
genera el archivo actions del modulo, dentro se encuentras las
acciones que crea symfony por default, una de ellas es executeDelete
que se encarga de borrar el objeto, obtiene el objeto y luego llama al
metodo delete del objeto, dentro de esa accion podrías realizar las
tareas correspondientes para eliminar las fotos.
Reply all
Reply to author
Forward
0 new messages