DoctrineFixturesBundle icon indicating copy to clipboard operation
DoctrineFixturesBundle copied to clipboard

FK error by purge (incorrect order of deleting from tables)

Open maximmandrik opened this issue 3 years ago • 3 comments

There is such an tables architecture:

Execute app:fixtures:load with purge.

When automatically deleting from network_switches_ports, I get an error:

[critical] Error thrown while running command "doctrine:fixtures:load". Message: "An exception occurred while executing a query: SQLSTATE[23503]: Foreign key violation: 7 ERROR:  update or delete on table "network_switches_ports" violates foreign key constraint "fk_47b01a1e7449a980" on table "hardware_ip_cameras"
DETAIL:  Key (id)=(1ece1947-037b-6c14-90d9-8784702a4f98) is still referenced from table "hardware_ip_cameras"."

FK from hardware_ip_cameras.

If you delete in the correct order, then such an error would not have occurred.

Correct order of deleting from tables: hardware_ip_cameras, hardware_video_servers, network_switches_ports, hardware_network_switches, hardware.

maximmandrik avatar Jun 01 '22 10:06 maximmandrik

Please provide a stack trace

greg0ire avatar Jun 01 '22 11:06 greg0ire

There are no other way to disable the FK constraint in doctrine:fixtures:load command when you want to refresh the database, so have to use this way instead:

From https://github.com/doctrine/DoctrineFixturesBundle/issues/50

php bin/console doctrine:schema:drop --force
php bin/console doctrine:schema:update --force
php bin/console doctrine:fixtures:load

fd6130 avatar Jun 21 '22 12:06 fd6130

Depending on you database, you could try the truncate flag. However, if it causes an implicit flush for the transaction, you will be out of luck with that method on PHP 8.

I've solved this issue by using a custom purger, basically as described here: https://stackoverflow.com/questions/64570346/doctrine-fixtures-how-to-override-the-purger-class

bobvandevijver avatar Jan 25 '23 08:01 bobvandevijver