Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-10-2008 14:19:44

barbarno
Nouveau membre
Date d'inscription: 17-10-2008
Messages: 7

[Zend_Db_Table][1.6] Delete Cascade sur n niveaux

Bonjour,

Je cherche à savoir s'il est possible de supprimer en cascade sur plusieurs niveaux.

J'ai 3 tables : gamme, rayon, produit (1 gamme contient n rayons et un rayon contient n produits).
J'ai trois classes : Gammes, Rayons, Produits (toutes les $_referenceMap et $_dependentTables sont indiquées)

Lorsque je supprime un rayon, les produits associés sont bien supprimés.
Lorsque je supprime une gamme, les rayons associés sont bien supprimés MAIS pas les produits associés aux rayons.

Ci-dessous le code de mes classes.

class Gammes extends Zend_Db_Table_Abstract
{
    protected $_name = 'gamme';
    protected $_primary = 'gam_id';
    protected $_dependentTables = array('Rayons');
   
}
class Rayons extends Zend_Db_Table_Abstract
{
    protected $_name = 'rayon';
    protected $_primary = 'ray_id';
    protected $_dependentTables = array('Produits');
    protected $_referenceMap    = array(
        'gamme' => array(
            'columns'           => 'gam_id',
            'refTableClass'     => 'Gammes',
            'refColumns'        => array('gam_id'),
            'onDelete'          => self::CASCADE
        )
    );
}
class Produits extends Zend_Db_Table_Abstract
{
    protected $_name = 'produit';
    protected $_primary = 'pro_id';
    protected $_referenceMap    = array(
        'rayon' => array(
            'columns'           => 'ray_id',
            'refTableClass'     => 'Rayons',
            'refColumns'        => array('ray_id'),
            'onDelete'          => self::CASCADE
        )
    );
}

Donc ma question est "simple" : peut-on directement supprimer les produits en supprimant une gamme sans définir de liaison entre produit et gamme ?

Merci à tous.

Hors ligne

 

#2 17-10-2008 19:13:18

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Db_Table][1.6] Delete Cascade sur n niveaux

Salut,

En pratique ces opérations devaient être gérées par le serveur MySQL (moteur InnoDB) qui te permet d'effectuer automatiquement ce genre d'opérations.

En configurant les relations entre tes tables, le moteur sera capable d'effectuer des suppressions en cascade. Donc je te conseille de te renseigner sur le sujet plutôt que de chercher du côté de ZF wink

Hors ligne

 

#3 17-10-2008 21:15:38

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Zend_Db_Table][1.6] Delete Cascade sur n niveaux

En effet, au plus il y a de logique métier sur le SGBD, au mieux c'est de manière générale, et les relations sont les premières choses à déporter :-)
Note qu'avec le SGBD ces opérations sont atomiques, dont l'intégrité des données est maintenue.

Hors ligne

 

#4 17-10-2008 23:29:20

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db_Table][1.6] Delete Cascade sur n niveaux


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 20-10-2008 16:49:02

barbarno
Nouveau membre
Date d'inscription: 17-10-2008
Messages: 7

Re: [Zend_Db_Table][1.6] Delete Cascade sur n niveaux

Merci à tous pour ces réponses.

Vous vous en doutez bien, pour arriver à déclarer mes classes de cette manière, j'ai plus que parcouru la doc.... et j'ai bien vu les reco de ZEND sur l'utilisation des fonctionnalités de delete cascade et autre.

En effet je ne suis pas en INNODB mais en MYISAM ; j'ai fait ce choix pour supporter la recherche full text (ex : je recherche "cles" et je trouve "clés") et aussi pour pouvoir contrôler les suppressions en cascade :
dans certains cas de figure, on ne souhaite pas supprimer la "descendance". Dans mon cas un produit pourrait ne plus appartenir à un rayon et/ou une gamme.

Par contre si vous me dites qu'avec INNODB je peux gérer les suppressions en cascade (un coup je veux et un coup je veux pas) et qu'en plus je peux faire de la recherche fulltext sans tenir compte des accentuations de caractère... alors je suis preneur.

Ceci dit, peut-on le faire quand même avec le ZEND ?

Et si je dit des "bêtises" sur INNODB et MYISAM, vous pouvez vous lacher... j'avoue ne pas avoir fait plus de recherche que ça .... et avoir commencé mon analyse et mon dev sur des certitudes bien plantées.

Merci à tous.

Hors ligne

 

#6 20-10-2008 19:22:07

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Db_Table][1.6] Delete Cascade sur n niveaux

Salut,

Tu peux effectuer les mêmes recherches sur une table InnoDB que sur une table MyISAM. De plus, les actions en CASCADE (comme la suppression) peuvent être activées ou non. Tu peux donc configurer tes dépendances comme tu le souhaites.

C'est à toi de choisir si tu veux confier cette tâche à ton SGBD ou à Zend. Personnellement, je préfère le premier qui a en plus l'avantage de "t'obliger" à designer tes tables correctement.

Et pour plus d'informations, je te conseille de lire un bout de la doc de MySQL et d'ouvrir phpMyAdmin et t'essayer à la création de quelques tables InnoDB liées entre elles ainsi qu'à la suppresion de données. Je pense que cela te permettra d'y voir plus clair wink

wink

Hors ligne

 

#7 18-12-2008 12:38:37

barbarno
Nouveau membre
Date d'inscription: 17-10-2008
Messages: 7

Re: [Zend_Db_Table][1.6] Delete Cascade sur n niveaux

acharrex a écrit:

Tu peux effectuer les mêmes recherches sur une table InnoDB que sur une table MyISAM

Euh ben en fait ... Je te joint le lien
http://dev.mysql.com/doc/refman/5.0/fr/ … tions.html

et pour ceux que ca intéresse j'ai trouvé une "bidouille" qui permet de passer outre la contrainte innodb et recherche fulltext incompatible (j'ai pas testé)
http://www.grafactory.net/blog/post/200 … avec-Mysql

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages