Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

doctrine fixtures + foreign key

Les fixtures sont très pratiques et leur rôle est de nous faire gagner du temps. C’est pourquoi il est particulièrement énervant de devoir faire des manipulations dans phpmyadmin avant de charger nos fixtures à cause de clefs étrangères qui nous pourrissent la vie. Voici la solution pour ne plus être obligé de vider manuellement vos tables contenant des clefs étrangères.

Il suffit d’ajouter au début de votre methode “load” de votre fixtures les lignes suivantes:


public function load(ObjectManager $manager) {	

		$manager->getConnection()->executeUpdate("SET foreign_key_checks = 0;");
		$tableArray = array("catalogue_categorie","catalogue_product","catalogue_categorie_product");
		foreach($tableArray as $table)
			$manager->getConnection()->executeUpdate($manager->getConnection()->getDatabasePlatform()->getTruncateTableSQL($table));
		$manager->getConnection()->executeUpdate("SET foreign_key_checks = 1;");

//placez ensuite ici vos objets a charger
}

Attention n’oubliez pas de rajouter “–append” lorsque vous allez load vos fixtures, sinon doctrine essaiera de vider la table avant de passer dans la fonction load de votre fixture, et “foreign_key_check” sera toujours à 1. Vous aurez donc le même message d’erreur que d’habitude à savoir:


"Integrity violation: 1451 Cannot delete or update a parent row: a foreign key constraint: fails"

Poster un Commentaire

Soyez le premier à commenter !

Recevoir un email pour
avatar
wpDiscuz