Tabella pivot universale ORM Kohana (KO3) (campi: model1, model1_id, model2, model2_id) - possibile?
-
28-10-2019 - |
Domanda
Ho la seguente configurazione di modelli:
User
- has_many File (for userpics)
Gallery
- has_many File (for images)
Page
- has_one File (for background image)
L'oggetto Pagina potrebbe condividere un oggetto File con uno o più oggetti della Galleria per lo sfondo.E a un certo punto più tardi un nuovo modello come
Product
- has_many File
o simili possono essere visualizzati nell'app.
Nota che ho bisogno di un modello di file invece di memorizzare semplicemente i percorsi dei file effettivi perché il modello di file può fare riferimento, infatti, a diversi file nel filesystem
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....
Quindi, esiste un modo semplice (senza sovrascrivere l'intera classe ORM) per implementare relazioni che utilizzerebbero una tabella pivot "generica" con i seguenti campi:
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
Il motivo: desidero avere un modulo App universale per il controllo dei file "orfani" ed essere anche in grado di indicare a cosa è allegato ciascun file, quindi, ad esempio, quando si elimina un file dalla Galleria l'appavvisa che il file è ancora allegato a una pagina come sfondo.
Soluzione
La risposta breve è no.Il motivo è perché model_id entrerebbe in conflitto con altri ID modello.Se lo desideri, potresti creare un indice univoco su model_name + model_id, ma per unire queste due colonne sarebbe necessario riscrivere i metodi ORM per unire i modelli tramite le loro relazioni.
Sinceramente mi atterrei a semplici tabelle pivot.