2010-06-17 7 views
0

Je travaille avec un schéma de base de données existante, et en essayant d'installer deux modèles Doctrine avec plusieurs à plusieurs, as described in this documentDoctrine 1.2 colonne Conventions de nommage pour beaucoup de nombreuses relations

Lors de la création des tables à partir de zéro, j'ai pas de problème pour que cela fonctionne. Toutefois, les tables de jointure existantes utilisent une convention de dénomination différente de celle décrite dans le document Doctrine. Plus précisément

Table 1 
-------------------------------------------------- 
table_1_id 
....other columns.... 

Table 2 
-------------------------------------------------- 
table_2_id 
....other columns.... 

Join Table 
-------------------------------------------------- 
fktable1_id 
fktable_2_id 

En gros, les développeurs précédents préfacé toutes les clés étrangères avec un fk.

A partir des exemples que je l'ai vu et quelques brèves expériences avec le code, il semble que la doctrine 1.2 exige que la table de jointure utiliser les mêmes noms de colonnes que les tables, il est joindre à

  1. Est-ce que mon hypothèse est correcte?

  2. Si oui, la situation a-t-elle changé dans Doctrine 2?

  3. Si les réponses à une ou l'autre de ce qui précède sont vraies, comment configurer les modèles vous afin que « aligner » toutes les colonnes

Répondre

1

Jetez un oeil at the docs au sujet N: relations M.

Quand vous regardez

$this->hasColumn('user_id', 'integer', null, array(
       'primary' => true 
      ) 
     ); 

de la documentation, vous voyez que c'est est à vous comment vous nommez la colonne de jointure modèle.

Étant donné que vous avez une base de données existante, pourquoi les modèles génèrent-ils les modèles via Doctrine? Le API vous montre les options nécessaires pour cela. Je l'ai utilisé moi-même et ça marche plutôt bien. Parfois, vous pouvez avoir besoin de quelques nettoyages si vous avez une structure compliquée mais les fichiers générés sont un très bon début.

+0

J'ai généré mes modèles à partir de la base de données, mais les relations n'ont pas été prises en compte. Existe-t-il une option spéciale que vous devez transmettre à la méthode generateModelsFromDb pour dire à la doctrine de faire sa meilleure estimation des relations? –

+0

Non, ça devrait aller quand vous le générez. Avez-vous testé les modèles générés dans votre application? – DrColossos

+0

Ah, je pense que je vois ce que vous obtenez ici. Dans le cas contraire, aliaser les noms des colonnes de la base de données selon la doctrine voulue pour les noms de champs a fait l'affaire ($ this-> hasColumn ('fksection_id as section_id') –

1

Il vous suffit de définir les parties locales et étrangères pour correspondre à vos noms de colonnes

Table1: 
    columns: 
    table_1_id: int 
    .... 
    relations: 
    Table2: 
     foreignAlias: FromSecond 
     local: table_1_id 
     foreign: fktable1_id 
     refClass: JoinTable 
Table2: 
    columns: 
    table_2_id: int 
    .... 
    relations: 
    Table1: 
     foreignAlias: FromFirst 
     local: table_2_id 
     foreign: fktable2_id 
     refClass: JoinTable 
JoinTable: 
    columns: 
    fktable1_id: int 
    fktable2_id: int 
    relations: 
    Table1: 
    Table2: 
+0

Je ne suis pas en train de sauter dans YAML immédiatement pour éviter le problème mental "trop ​​de nouvelles choses à la fois". Quel genre de classes/méthodes d'installation est-ce que le ci-dessus génère? –

Questions connexes