|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Salut,
J'ai plusieurs tables MySQL telles que : "comment" dépend de "article", "article" dépend de "rubric", "rubric" dépend de blog. Dans les classes modèles, les variables _dependantTables et _referenceMap sont faites pour représenter cette structure. Les propriétés 'onDelete' des entrées de _referenceMap sont en "CASCADE". Or, lorsque je fais : Code :
|
||
|
|
00
|
|
|
#2 | |
|
Expert Confirmé
![]() ![]() Inscription : mars 2006 Messages : 1 989 ![]() |
Bonjour,
Citation:
Pour moi, ce cas ressemble bien à un bug du framework (ou au moins une absence de fonctionnalité). En fait, quand tu appelles la méthode delete() de Zend_Db_Table_Row, cela déclenche la méthode _cascadeDelete des tables enfant. Cette méthode _cascadeDelete appele à son tour la méthode delete() de Zend_Db_Table. C'est ici qu'il y a à mon sens un oubli : il n'y a pas de vérification d'existence de tables dépendantes... D'ailleurs, si au lieu de passer par un Zend_Db_Table_Row pour faire ton delete, tu avais fait simplement un Code :
$rubricAdapter->delete("mon_id = $id") Après, ce qui me semble compliqué dans la surcharge du delete() de Zend_Db_Table, c'est que pour utiliser le _cascadeDelete, il faudrait récupérer toutes les clés primaires des éléments supprimés... Pour conclure, si j'avais besoin de cette fonctionnalité, je pense que j'essaierai autant que possible d'utiliser les fonctionnalités offertes par le SGBD plutôt que celles du framework (contraintes avec on delete cascade, triggers...). Bon courage |
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Merci de la réponse. Je viens de regarder le code ZF et ça semble en effet complexe de surcharger cette méthode. Je vais voir.
Merci |
|
|
00
|
|
|
#4 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
C'est le job du SGBD de conserver l'intégrité référentielle. Es-tu certain d'avoir bien mis les bonnes clefs, les bonnes contraintes où il faut ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#5 | |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Citation:
|
|
|
|
00
|
|
|
#6 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Oui, avoir une base MySQL n'est pas une excuse. Le moteur InnoDB gère les sous requêtes, l'intégrité référentielle et les transactions depuis bien longtemps.
[Edit] Question de performances, obliger ZF à s'occuper de l'intégité signifie que tu envoies de très nombreuses requêtes à ta BDD, donc de nombreux allers-retours entre ton appli et ton SGBD, donc une très grosse perte de performances par rapport à l'intégrité gérée en interne par les contraintes de tes tables. [Edit 2] Tutoriel MySQL : Limiter la complexité du code applicatif grâce au SGBD par Alain Defrance
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Merci du lien
|
|
|
00
|
|
|
#8 | ||
|
Membre expérimenté
![]() Inscription : septembre 2005 Messages : 925 ![]() |
Code :
ca fait un peu peur non? |
||
|
|
00
|
|
|
#9 | |||
|
Expert Confirmé
![]() ![]() Inscription : mars 2006 Messages : 1 989 ![]() |
Citation:
Mais quel est le lien avec ce sujet ? |
|||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Ce code est proposé dans l'article conseillé par Yogui
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() ![]() Inscription : mars 2006 Messages : 1 989 ![]() |
|
|
|
00
|
|
|
#12 | |||
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#13 |
|
Membre expérimenté
![]() Inscription : septembre 2005 Messages : 925 ![]() |
ce qui me gene c'est :
1- la dépendance envers les messages d'erreurs du moteur utilisé (je n'ai aucune idée de leur stabilité) 2- la dépendance envers le moteur de stockage a l'heure de PDO et autre. 3- la dependance envers les noms des colonnes. et puis, plus globalement, le flou entre filtrage des entrées, soumission de la requête, et retours d'erreur de saisie. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com