2011-10-02 11 views
7

¿Cómo puedo configurar el nombre de la clave externa (edición: no el nombre del atributo en sí) para la muchos-a-uno relación "región" usando YAML?Nombrar una relación en Doctrine 2 ORM?

SWA\TestBundle\Entity\Province: 
    type: entity 
    table: province 
    uniqueConstraints: 
    UNIQUE_PROVINCE_CODE: 
     columns: code 
    id: 
    id: 
     type: integer 
     generator: { strategy: AUTO } 
    fields: 
    code: 
     type: integer 
    name: 
     type: string 
     length: 255 
    short_name: 
     type: string 
     length: 2 
    manyToOne: 
    region: 
     targetEntity: Region 
     inversedBy: provinces 

Respuesta

11

Mira el getCreateConstraintSQL method in the AbstractPlatform class para ver cómo se elige el nombre de la clave externa (line 1088).

se toma directamente del nombre de restricción. Influir en el nombre de la restricción influirá en el nombre de la clave externa.

Como solución alternativa, puede eliminar la restricción y volver a crearla con un nuevo nombre en a doctrine migration.

+0

lo que no hay manera "estándar" de cambiarlo - aparte del procedimiento de migración? El nombre es completamente aleatorio, supongo, como FK_28392f89329. – gremo

+1

Bueno, podrías sobrecargar la clase de la plataforma, pero no creo que valga la pena solo por nombrar la restricción. –

+0

De acuerdo. Gracias, generosidad + respuesta para ti! – gremo

3

Debido a la respuesta de @JakubZalas, he echado un vistazo al código en Github, y he visto que cambiar el código de la estructura para hacer lo que quieres es realmente fácil.

Si marca la carpeta en la clase AbstractPlatform es, verá que hay una clase ForeignKeyConstraint. En él, verá que hereda de AbstractAsset.

clase AbstractAsset Ahora tiene un método _generateIdentifierName. Si marca este método en github, verá que tiene una parte comentada que hace exactamente lo que quiere. Simplemente elimine el comentario de esta parte, comente la parte activa real, cambie el parámetro $ prefijo a $ postfix y listo. El nombre de la restricción se generará utilizando los nombres de tabla y columna con un sufijo correspondiente.

El archivo es el AbstractAsset.php la siguiente carpeta: Symfony/vendor/doctrine/DBAL/lib/Doctrina/DBAL/Esquema

traté en mi proyecto de hormigas que funcionaba bien.

Una información final: al menos para mi proyecto de la parte comentado menciono anteriormente es sólo en GitHub, no en el archivo en mi máquina local.