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;Voici leurs classes respectives qui extendent Zend_Db_Table_Abstract :
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;
<?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"
)
);
}En faisant, ça ne supprime pas en cascade :<?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
}
}
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.<?php
// ...
$Fiche = new Fiche();
$Fiche->delete("ID=".1);
// supprime seulement dans Fiche mais pas dans PieceJointe
Partager