2010-01-06 6 views
0

Donc je suis nouveau à symfony et essaye de faire une relation entre plusieurs tables. J'ai une table de médias qui a un champ d'identification qui est la clé primaire. Je puis alors avoir 2 tables supplémentaires ou plus qui sont des "sous-classes" de cette table comme un article ou une table d'événements. Ce sont des sous-classes de la table des médias et je mets un champ media_id dans ces tables qui ont des contraintes FK avec la table des médias et sont des clés primaires des tables spécifiques. Cependant, lorsque je construis le module basé sur ce modèle, cette relation ne tient pas. Par exemple, lorsque j'essaie d'ajouter un article, je dois d'abord ajouter un élément multimédia, mais dans le formulaire de création d'article, il n'y a aucun moyen d'y ajouter un identifiant multimédia.Symfony is-a schéma de base de données

Des idées?

Merci!

Répondre

1

Utilisation inheritance au lieu d'une relation:

detect_relations: true 
Media: 
    columns: 
    #columns for all sub classes 

Event: 
columns: 
# other columns for Event Subclass 
inheritance: 
    extends: Media 
    type: column_aggregation 
    key_field: type 
    key_value: 1 

Other: 
columns: 
# other columns for Other Subclass 
inheritance: 
    extends: Media 
    type: column_aggregation 
    key_field: type 
    key_value: 2 
+0

Intéressant. mais cela crée une grande table avec toutes les colonnes. cela ne semble pas être une bonne idée si je veux ajouter plus de tables de sous-classes à l'avenir. – Danny

+0

L'héritage concret (par opposition à l'agrégation de colonnes) les placera dans des tables séparées. Bien que l'utilisation d'une migration vous permettrait d'ajouter des colonnes à une date ultérieure. – prodigitalson

+1

Merci encore pour votre aide. J'ai donc essayé le béton, mais il ne semble pas vraiment ajouter de lignes dans la table des médias. Le but de la raison pour laquelle je veux faire ceci est de garder les id synchronisés entre tous les types de médias afin que je puisse attacher des commentaires et des étiquettes à chacun d'entre eux. Des idées? Merci! – Danny

Questions connexes