IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Zend_Db_Table_Abstract et suppression en cascade sous MySQL avec le moteur InnoDB ?


Sujet :

Zend_Db PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Points : 37
    Points
    37
    Par défaut Zend_Db_Table_Abstract et suppression en cascade sous MySQL avec le moteur InnoDB ?
    Bonjour, j'ai trois tables : Catégorie, Fiche et PieceJointe dans la base MySQL (en mode InnoDB) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE `Categorie` (
      `ID` int(10) NOT NULL auto_increment,
      `Nom` varchar(100) default NULL
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE `Fiche` (
      `ID` int(10) NOT NULL auto_increment,
      `CategorieID` int(10) NOT NULL default '0',
      `Nom` varchar(100) default NULL
      PRIMARY KEY  (`ID`),
      KEY `FKCategorie` (`CategorieID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE `PieceJointe` (
      `ID` int(10) NOT NULL auto_increment,
      `FicheID` int(10) NOT NULL default '0',
      `Nom` varchar(100) default NULL
      PRIMARY KEY  (`ID`),
      KEY `FKPiecejointe` (`FicheID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Voici leurs classes respectives qui extendent Zend_Db_Table_Abstract :

    <?php

    class Categorie extends Zend_Db_Table_Abstract
    {
    protected $_name = "Categorie";
    protected $_primary = "ID";
    protected $_dependentTables = array('Fiche');
    }
    <?php

    class Fiche extends Zend_Db_Table_Abstract
    {
    protected $_name = "Fiche";
    protected $_primary = "ID";
    protected $_dependentTables = array('PieceJointe');

    protected $_referenceMap = array(
    "categorie" => array(
    "columns" => "CategorieID",
    'refTableClass' => "Categorie",
    'refColumns' => "ID"
    )
    );
    }
    <?php

    class PieceJointe extends Zend_Db_Table_Abstract
    {
    protected $_name = "PieceJointe";
    protected $_primary = "ID";

    protected $_referenceMap = array(
    "mailing" => array(
    "columns" => "FicheID",
    'refTableClass' => "Fiche",
    'refColumns' => "ID"
    )
    );

    public function delete($where)
    {
    // Suppression des fichiers sur le serveur
    }

    }
    En faisant, ça ne supprime pas en cascade :

    <?php
    // ...
    $Fiche = new Fiche();
    $Fiche->delete("ID=".1);
    // supprime seulement dans Fiche mais pas dans PieceJointe
    Voyez-vous pourquoi, d'après la doc de Zend, il faut activer le mode innoDB de MySQL pour émuler un delete en cascade . Merci de vos éclaircissement.

  2. #2
    darthmower
    Invité(e)
    Par défaut
    Bonjour,

    Est-ce que tu as configuré ta FOREIGNKEY en ON DELETE CASCADE dans la base de donnée?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par darthmower Voir le message
    Bonjour,

    Est-ce que tu as configuré ta FOREIGNKEY en ON DELETE CASCADE dans la base de donnée?
    Non mais je ne vois pas trop l'intérêt de la variable $_dependentTables si je mets la FOREIGNKEY en ON DELETE CASCADE dans ma base.

    J'ai oublié de précisé que j'ai ajouté l'option 'onCascade' dans la $_referenceMap de Fiche, c'est pareil.

  4. #4
    darthmower
    Invité(e)
    Par défaut
    Les referenceMap et dependentTables servent aux jointures, principalement. Laisse la SGBD s'occuper de ce qu'elle a à s'occuper.

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par darthmower Voir le message
    Les referenceMap et dependentTables servent aux jointures, principalement. Laisse la SGBD s'occuper de ce qu'elle a à s'occuper.
    Précisons cette phrase : ce n'est pas le ZF qui va s'occuper de la cascade, mais bien ton moteur de base de données.
    Inversement, si tu avais bien configurer ta Foreign Key dans la base, la cascade aurait eu lieu avec ou sans $_dependentTables
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

Discussions similaires

  1. [PDO] Stocker des images sous MySQL avec PHP
    Par yoco2075 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/07/2013, 03h51
  2. [Hibernate2] Vider une table sous MySQL avec Hibernate
    Par seanbean dans le forum Hibernate
    Réponses: 8
    Dernier message: 07/02/2012, 14h05
  3. Créer une procédure stockée sous MySQL avec phpmyadmin
    Par Jordan59 dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 17/08/2011, 14h08
  4. Sauvegarder fichier RTF sous Mysql avec Java
    Par SaladinDev dans le forum JDBC
    Réponses: 4
    Dernier message: 27/12/2009, 20h38
  5. suppression en cascade dans formulaire et sous-formulaire
    Par tooneygirl dans le forum Access
    Réponses: 7
    Dernier message: 20/06/2005, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo