Details
-
Type:
Bug
-
Status:
Resolved
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.1.6
-
Fix Version/s: 2.2.2
-
Component/s: None
-
Security Level: All
-
Labels:None
-
Environment:Symfony 2.0.9
Description
If a relation is changed from ManyToOne to OneToOne a Mysql exception 1025 is thrown because schema:update attempts to drop the indexes without first dropping the foreign keys. This seems to happen since the foreign keys are not deleted from the entity.. but the indexes change type (from index to unique).
Incorrect output from --dump-sql
DROP INDEX IDX_9AFB9A3755EB82D0 ON tapi_phone;
DROP INDEX IDX_9AFB9A37A6A12EC1 ON tapi_phone;
ALTER TABLE tapi_phone ADD location_id INT DEFAULT NULL, CHANGE extension extension VARCHAR(255) DEFAULT NULL, CHANGE protocol protocol VARCHAR(255) DEFAULT NULL;
ALTER TABLE tapi_phone ADD CONSTRAINT FK_9AFB9A3764D218E FOREIGN KEY (location_id) REFERENCES tapi_location(id);
CREATE UNIQUE INDEX UNIQ_9AFB9A37F85E0677 ON tapi_phone (username);
CREATE UNIQUE INDEX UNIQ_9AFB9A37B728E969 ON tapi_phone (mac_address);
CREATE UNIQUE INDEX UNIQ_9AFB9A3755EB82D0 ON tapi_phone (default_user_id);
CREATE INDEX IDX_9AFB9A3764D218E ON tapi_phone (location_id);
CREATE UNIQUE INDEX UNIQ_9AFB9A37A6A12EC1 ON tapi_phone (registered_user_id)
Expected output from --dump-sql
ALTER TABLE tapi_phone DROP FOREIGN KEY FK_9AFB9A3755EB82D0;
DROP INDEX IDX_9AFB9A3755EB82D0 ON tapi_phone;
ALTER TABLE tapi_phone DROP FOREIGN KEY FK_9AFB9A37A6A12EC1;
DROP INDEX IDX_9AFB9A37A6A12EC1 ON tapi_phone;
ALTER TABLE tapi_phone ADD location_id INT DEFAULT NULL, CHANGE extension extension VARCHAR(255) DEFAULT NULL, CHANGE protocol protocol VARCHAR(255) DEFAULT NULL;
ALTER TABLE tapi_phone ADD CONSTRAINT FK_9AFB9A3764D218E FOREIGN KEY (location_id) REFERENCES tapi_location(id);
ALTER TABLE tapi_phone ADD CONSTRAINT FK_9AFB9A3755EB82D0 FOREIGN KEY (default_user_id) REFERENCES tapi_user (id);
ALTER TABLE tapi_phone ADD CONSTRAINT FK_9AFB9A37A6A12EC1 FOREIGN KEY (registered_user_id) REFERENCES tapi_user (id);
CREATE UNIQUE INDEX UNIQ_9AFB9A37F85E0677 ON tapi_phone (username);
CREATE UNIQUE INDEX UNIQ_9AFB9A37B728E969 ON tapi_phone (mac_address);
CREATE UNIQUE INDEX UNIQ_9AFB9A3755EB82D0 ON tapi_phone (default_user_id);
CREATE INDEX IDX_9AFB9A3764D218E ON tapi_phone (location_id);
CREATE UNIQUE INDEX UNIQ_9AFB9A37A6A12EC1 ON tapi_phone (registered_user_id);
I have solved it by extending the method inside MySqlPlatform class (based in DBAL 2.1.5-DEV):