Tabla dinámica universal Kohana (KO3) ORM (campos: model1, model1_id, model2, model2_id) - ¿posible?

StackOverflow https://stackoverflow.com/questions/8869705

Pregunta

Tengo la siguiente configuración de modelos:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)

El objeto Página podría compartir un objeto Archivo con uno o más objetos Galería como fondo.Y en algún momento después, un nuevo modelo como

Product
   - has_many File

o algo similar puede aparecer en la aplicación.

Tenga en cuenta que necesito un modelo de archivo en lugar de simplemente almacenar rutas a los archivos reales porque el modelo de archivo puede hacer referencia, de hecho, a varios archivos en el sistema de archivos

File
   - id
   - path
   - path_poster
   - path_m4v     (HTML5 videos need up to three files for compatibility)
   - path_webm
   - path_ogv
   - width
   - height
   - poster_width
   - poster_height
   - type
   - ... etc....

Entonces, ¿existe una manera simple (sin sobrescribir toda la clase ORM) de implementar relaciones que usarían una tabla dinámica "genérica" con los siguientes campos:

model_name VARCHAR(8) (or model_type_id TINYINT for speed)
model_id INT
file_id INT
relation_name VARCHAR(8)  (e.g., Page model can have "background" and "logo" relation)
position INT

La razón: quiero tener un módulo de aplicación universal para verificar archivos "huérfanos", y también poder saber a qué se adjunta cada archivo, así que, por ejemplo, al eliminar un archivo de la Galería, la aplicaciónadvierte que el archivo todavía está adjunto a una página como fondo.

¿Fue útil?

Solución

La respuesta corta es no.El motivo es que model_id entraría en conflicto con otros ID de modelo.Si lo desea, puede hacer un índice único en model_name + model_id, pero para unir esas dos columnas sería necesario volver a escribir los métodos ORM para unir modelos a través de sus relaciones.

Honestamente, me quedaría con tablas dinámicas simples.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top