2011-04-15 26 views
6

Por alguna doctrina razón está tratando de insertar un índice llamado primaria en lugar de tener que añadir una clave principal en mi base de datos MySQL, esto es lo que genera Doctrina:Doctrina 2 múltiples claves primarias

CREATE UNIQUE INDEX primary ON my_table (columnOne, columnTwo); 

Esto es lo que mi SQL editor genera y este es el único método que funciona:

ALTER TABLE my_table ADD PRIMARY KEY (columnOne,columnTwo); 

ésta es mi clase:

.... 
class MyTable 
{ 
    /** 
    * @var integer $columnOne 
    * 
    * @Column(name="columnOne", type="integer", nullable=false) 
    * @Id 
    * @GeneratedValue(strategy="NONE") 
    */ 
    private $columnOne; 

    /** 
    * @var integer $columnTwo 
    * 
    * @Column(name="columnTwo", type="integer", nullable=false) 
    * @Id 
    * @GeneratedValue(strategy="NONE") 
    */ 
    private $columnTwo; 
} 
+0

¿Cómo se resuelve el problema en el final? – helvete

Respuesta

2

La respuesta es sí y no. Por favor, echa un vistazo a esta entrada del blog:

http://www.doctrine-project.org/blog/dc2-experimental-associations-id-fields.html

+0

Creo que el problema es que la doctrina orm: schema-tool: update está tratando de insertar un índice llamado primario en lugar de un valor primario real. Esto fallará y me dará una advertencia de mysql. – Dennis

+0

@Dennis Solo una corazonada, pero creo que no deberías usar '@ GeneratedValue' con claves compuestas. – vbence

+0

Si elimino GeneratedValue o si uso strategy = "AUTO" (lo mismo si no estoy equivocado) el orm: schema-tool: update no gime mientras tenga una clave principal, pero si elimino el primario clave o si, por ejemplo, quiero crear una base de datos limpia, seguiría teniendo el problema CREATE UNIQUE INDEX. – Dennis

1

Adición de información sobre las limitaciones únicos varias columnas aquí porque esto es lo que ocurrió cuando busqué en Google para ello.

Si quieres algo como esto SQL:

CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) 

uso esta anotación en Doctrine2

@Table(name="ecommerce_products",uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "email"})}) 

véase: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/annotations-reference.html#uniqueconstraint

Cuestiones relacionadas