Bonjour à tous,
Je ne comprends pas bien le sens des options sur les clés étrangères. Dans ma base de données, j'ai une table de biens immobiliers, et une table de photos. Chaque photo a trois champs : son id, son nom, et l'id du bien qu'elle représente. Ce dernier est ma clé étrangère.
Lorsque je supprime un bien, je veux que les photos soient supprimées automatiquement, mais je veux qu'on puisse supprimer des photos sans avoir à supprimer le bien. En ce qui concerne l'UPDATE, je souhaite faire en sorte que, si l'on change l'id d'un bien, la clé étrangère de la photo soit aussi modifiée. J'ai donc mis :
ON DELETE RESTRICT ON UPDATE CASCADE. Seulement, j'ai une fonction supprimer() qui est rédigée de cette façon :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public function supprimer(Bien $bien) { if (!empty($bien->getPhotos)) { $this->bdd->exec('DELETE * FROM photos WHERE id_bien = '.$bien->getId()); } $this->bdd->exec('DELETE FROM biens WHERE id = '.$bien->getId()); }
Je prévois donc la suppression de la photo avant la suppression du bien. Pourtant, lorsque je fais appel à cette fonction, j'ai toujours le message d'erreur me disant que le bien ne peut être supprimer en raison de la présence de la clé étrangère.
Comment faut-il faire ? Faut-il changer les options de clé étrangère ? Dans quel sens fonctionnent ces options ? ON DELETE sur ma clé étrangère, qui est sur la table photos et fait référence à la table biens concerne-t-il la suppression d'un bien ou d'une photo ?
Merci de votre aide.
Partager