2016-09-15 4 views
-3

J'ai deux tables Groupes et Suivi et ils sont connectés. Je veux supprimer les enregistrements de groupes, et supprimer la clé étrangère dans le suivi, mais je ne sais pas comment supprimer ou mettre à jour en valeur nulle cette clé étrangère. Je ne veux pas supprimer tous les enregistrements du suivi. Une idée? Merci pour l'aide.Cascade Update or Delete - kohana

protected $_table_name = 'trackingGroup'; 
protected $_primary_key = 'trg_id'; 

protected $_has_many = array(
    'tracking' => array(
     'model' => 'Orm_tracking', 
     'foreign_key' => 'tr_trgId', 
    ), 
); 
protected $_belongs_to = array(
    'user' => array(
     'model' => 'Orm_users', 
     'foreign_key' => 'trg_uId', 
    ), 
); 

function delete(){ //my first idea 
     foreach($this->tracking->tr_trtId->find() as $tracking) 
      $tracking->delete(); 
     parent::delete(); 

    } 

Dans Tableau de suivi que j'ai:

tr_id int PK, 
tr_uId int FK, 
tr_trtId int FK,  
tr_trgId int FK, 
tr_dateCreate data, 
tr_status Char(1) 

En TrackingGroups:

trg_Id int PK, 
trg_name char(40), 
trg_description char(256), 
trg_uId int FK 

Comment faut-il supprimer des œuvres: lorsque l'utilisateur veut cliquez sur supprimer le bouton, il doit supprimer l'enregistrement de TrackingGroups et aussi devrait supprimer ou mettre à jour le champ tr_trgId dans la table de suivi, il devrait y avoir une valeur NULL dans tr_trgId.

+0

plz partager le code pour obtenir des idées – devpro

Répondre

1

Votre idée est exacte, pour trouver toutes les entrées de suivi, utilisez la fonction find_all(), puis définissez tr_trgId sur null et enregistrez-les. Ou vous pouvez réaliser ceci dans MySQL en utilisant Forign key events ON supprimer set null dans la table de suivi.

protected $_table_name = 'trackingGroup'; 
protected $_primary_key = 'trg_id'; 

protected $_has_many = array(
    'tracking' => array(
     'model' => 'Orm_tracking', 
     'foreign_key' => 'tr_trgId', 
    ), 
); 
protected $_belongs_to = array(
    'user' => array(
     'model' => 'Orm_users', 
     'foreign_key' => 'trg_uId', 
    ), 
); 

function delete(){ 
     //my first idea 
     foreach($this->tracking->tr_trtId->find_all() as $tracking){ 
      $tracking->tr_trgId= null; 
      $tracking->save(); 
     } 

     parent::delete(); 

    }