Tabla dinámica universal Kohana (KO3) ORM (campos: model1, model1_id, model2, model2_id) - ¿posible?
-
28-10-2019 - |
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.
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.