2011-10-10 14 views
7

Digamos que tengo una aplicación de blog.
El autor puede agregar varias imágenes a una publicación, ya sea dando un enlace a una url de una imagen existente en la web o cargando una nueva imagen.¿Cómo puedo hacer consultas de asociaciones de entidades complejas en la doctrina 2? (entidad virtual)

Quiero poder reproducir desde una imagen (ya sea cargada o url) a todas las publicaciones que usan esa imagen, y desde una publicación específica a todas las imágenes en esa publicación (por ejemplo, para poder eliminar imágenes que son ilegales y/o suspender la publicación que las usa hasta que el autor corrija la publicación).

Sin embargo, utilizo entidades diferentes para una imagen cargada frente a una imagen url: una imagen cargada tiene más datos sobre la imagen que una url.

Esto da como resultado un código más complejo, ya que en cada guardado de una publicación editada necesito verificar qué tipo es la imagen específica (de todas las imágenes en la publicación que necesito repasar) y luego crear o actualizar su registro, y asignar al campo de relación en la entidad post.

Entonces ... suponiendo que tengo una UploadedImage y un UrlImage entidades, pensé en tener un método setImages en la entidad post, que comprueba por cada imagen se pone, si está cargado o URL, y luego llama a cualquiera o setUploadedImagessetUrlImages.

Sin embargo, necesitaré algún tipo de repositorio virtual images, para cargar imágenes de la misma manera.

que suena un poco complejo, y me preguntaba:

  1. ¿Cómo puedo tener una entidad doctrina virtual (con su repositorio y todo)?
  2. ¿Hay un mejor diseño para ello?
+3

Ha considerado el uso [Mapeo de Herencia] (http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html)? – Orbling

+0

@Orbling de qué manera? ¿Y cómo resolverá el "problema" de decidir qué hacer con cada tipo? – Doron

+0

Bueno, al usar Mapeo de herencia, puede tener una superclase que represente ambos tipos, y luego se pueden manejar juntos. Pueden tener los mismos métodos y hacer cosas diferentes según el subtipo. – Orbling

Respuesta

2

Aquí está la documentación de lo que está tratando de hacer:
http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

En él se describe la herencia simple tabla vs herencia de tablas de clase. Su caso es adecuado para este último, pero también considere migrar a la herencia de tabla única.

Si (el código) los usuarios de estas imágenes las tratan igual independientemente de su origen, la complejidad de la consulta agregada y el uso de la base de datos no valdrá la normalización.

Cuestiones relacionadas