2009-07-22 6 views
0

Mon problème pour que Zend Framework fournisse une couche DRI peut maintenant être résumé en tant que tel. En utilisant les définitions de classe ci-dessous, je suis capable de supprimer l'utilisateur mais pas le commentaire lié via mon UserController local "public/users/delete/userId/22", même si j'ai défini une définition de relation .Zend Framework - Suppression en cascade à l'aide du modèle Table Data Mapper

Quelqu'un at-il des réponses à la question de savoir pourquoi l'enregistrement de commentaire associé n'est pas supprimé lorsque je supprime l'enregistrement des utilisateurs?

class Default_Model_DbTable_Comment extends Zend_Db_Table_Abstract 
    { 
     /** 
     * @var string Name of the database table 
     */ 
     protected $_name = 'comment'; 

     /** 
     * @desc reference map 
     * 
     * Rows in the comment table are to be automatically deleted if the row in the 
    * User table to which they refer is deleted 
    *  
    */ 
    protected $_referenceMap = array(
     'User' => array(
      'columns'  => 'user_id', // the foreign key(s) 
      'refTableClass' => 'Default_Model_DbTable_Users', 
      'refColumns' => 'id', 
      'onDelete'  => self::CASCADE, 
     ) 
    ); 

} 
class Default_Model_DbTable_Users extends Zend_Db_Table_Abstract 
{ 
    /** 
    * @var string Name of the database table 
    */ 
    protected $_name = 'users'; 


    /** 
    * @desc Defining referential integrity here since we are using MyISAM 
    * Dependent tables are referred via the class name. 
    */ 
    protected $_dependentTables = 'Default_Model_DbTable_Comment'; 



} 

Répondre

0

J'ai créé des modèles comme la vôtre et sur le test il semble que cela fonctionne uniquement si les tables dépendantes sont répertoriés dans un tableau:

class Default_Model_DbTable_Users extends Zend_Db_Table_Abstract 
{ 
    /** 
    * @var string Name of the database table 
    */ 
    protected $_name = 'users'; 


    /** 
    * @desc Defining referential integrity here since we are using MyISAM 
    * Dependent tables are referred via the class name. 
    */ 
    protected $_dependentTables = array('Default_Model_DbTable_Comment'); 



} 

Quand ils ne sont pas répertoriés dans un tableau, Je reçois l'erreur

Avertissement: argument non valide fourni pour foreach() dans C: \ PHP \ includes \ ZendFramework-1.8.4-minimal \ bibliothèque \ Zend \ Db \ Table \ Row \ Abstract.php sur la ligne 632

Cette erreur peut ne pas avoir été visible dans votre environnement.

+0

Comment obtenez-vous des erreurs comme ça .. puisque je ne trouve pas les erreurs de trace de la pile Zend très utile? –

+0

En outre, j'ai juste essayé la suggestion de définir dependentTables dans un tableau et l'application est tombée avec une erreur de pile Zend: Trace de pile: # 0 C: \ wamp \ www \ megashare \ application \ models \ UsersMapper.php (104): Zend_Db_Table_Row_Abstract-> delete() # 1 C: \ wamp \ www \ megashare \ application \ modèles \ Users.php (761): Default_Model_UsersMapper-> deleteUser (23, Object (Default_Model_Users)) # 2 C: \ wamp \ www \ megashare \ application \ contrôleurs \ UsersController.php (113): Default_Model_Users-> deleteUser (23) –

+0

Je pense que cette erreur nécessite error_reporting pour montrer E_STRICT en plus de E_ALL - dans tous les cas, assurez-vous que toutes les conditions d'erreur sont montré. La seule différence entre mon code et le vôtre est que je n'ai pas utilisé d'espace de noms pour les noms de classe du modèle, c'est-à-dire que mes classes étaient Utilisateurs et Commentaires. Je n'ai pas utilisé de datamapper, mais cela semble hors de propos. il appelle simplement delete() sur une ligne comme je l'ai fait. –

Questions connexes