tutorial subversion start migrations create php mysql symfony doctrine2 doctrine-migrations

php - subversion - symfony download



Cómo detener las migraciones de Doctrine2: ¿difiere de agregar siempre las relaciones de claves externas que ya existen en la base de datos? (1)

¿Por qué la doctrina todavía intenta agregar estas claves foráneas?

El término correcto aquí es "restricción de clave externa". Sin la restricción, la columna en cuestión es solo una columna. Es la restricción que exige que el valor de esa columna exista como clave principal en otra tabla.

¿Por qué la doctrina todavía intenta agregar estas claves foráneas?

Porque el proveedor / motor de la base de datos no admite restricciones de clave externa, pero Doctrine no lo reconoce.

Si tengo que adivinar, estás usando MySQL con el motor MyISAM. MyISAM no admite restricciones de clave externa. Lamentablemente, Doctrine no es lo suficientemente "inteligente" como para ver eso. Se ve que se utiliza MySQL, por lo tanto, supone ciegamente que las restricciones de clave externa son compatibles.

Mi consejo es cambiar al motor InnoDB, a menos que tenga una buena razón para usar MyISAM.

ALTER TABLE table_name ENGINE=InnoDB;

Conversión de tablas de MyISAM a InnoDB

Estoy usando doctrine2 con un proyecto symfony2.1. Tengo una entidad que tiene algunas relaciones de muchos a uno con otras tablas. Las relaciones de clave externa para estos muchos a uno ya se han actualizado en la base de datos, pero cada vez que ejecuto migrations: diff o schema: update --dump-sql agrega los mismos comandos de actualización para agregar nuevamente las relaciones de claves foráneas. Cuando ejecuto schema: validate dice que mi mapeo no está sincronizado con mi base de datos.

Mi aplicación funciona bien, las relaciones funcionan correctamente y el esquema en mi base de datos parece correcto. ¿Por qué la doctrina todavía intenta agregar estas claves foráneas?

Aquí está mi código (para uno de los parámetros problemáticos):

En mi entidad "Ticket" tengo:

/** * Authenticated User who scored the ticket. * * @ORM/ManyToOne(targetEntity="CS/SecurityBundle/Entity/User") * @ORM/JoinColumn(name="scoring_user_id", referencedColumnName="id") */ protected $scoringUser;

Actualmente tengo configurado para ser unidireccional, por lo que no hay invertedBy en la entidad de usuario.

Esto genera lo siguiente en mis migraciones o esquema: actualización de volcado a pesar de que ya está en la base de datos:

$this->addSql("ALTER TABLE tickets ADD CONSTRAINT FK_54469DF4BB0D9452 FOREIGN KEY (scoring_user_id) REFERENCES users (id)");

¿Alguna idea de lo que estoy haciendo mal aquí?