Kohana (KO3) Tableau de pivot universel ORM (champs: Model1, Model1_id, Model2, Model2_id) - possible?

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

Question

J'ai la configuration de modèles suivante:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)

L'objet Page peut partager un objet de fichier avec un ou plusieurs objets de galerie pour son arrière-plan. Et à un moment donné plus tard, un nouveau modèle comme

Product
   - has_many File

ou similaire peut apparaître dans l'application.

Notez que j'ai besoin d'un modèle de fichier au lieu de simplement stocker des chemins vers les fichiers réels car le modèle de fichier peut référence, en fait, plusieurs fichiers dans le système de fichiers

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....

Il y a donc un moyen simple (sans écraser toute la classe ORM) pour implémenter des relations qui utiliseraient une table de pivot "générique" avec les champs suivants:

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 raison: je veux avoir un module d'applications universels pour vérifier les fichiers "orphelins", et aussi être en mesure de dire à ce que chaque fichier est joint, donc, par exemple, lors de la suppression d'un fichier de la galerie, l'application avertirait que le Le fichier est toujours joint à une page en arrière-plan.

Était-ce utile?

La solution

La réponse courte est non. La raison en est que Model_ID serait en conflit avec d'autres ID de modèle. Si vous le vouliez, vous pouvez faire un index unique sur Model_name + Model_ID, mais rejoindre ces deux colonnes nécessiterait que vous réécrivez les méthodes ORM pour rejoindre des modèles ensemble via leurs relations.

Honnêtement, je m'en tiendrais à de simples tables de pivot.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top