2016-09-15 88 views
-3

我有两个表组和跟踪,他们连接。我想删除组记录,并在Tracking中删除外键,但我不知道如何将这个外键删除或更新为NULL值。我不想从Tracking中删除所有记录。任何想法?感谢帮助。级联更新或删除 - 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(); 

    } 

在追踪表,我有:

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

在TrackingGroups:

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

应该如何删除的工作原理:当用户要点击删除按钮,它应该从TrackingGroups删除记录并且还应删除或更新跟踪表中的字段tr_trgId,tr_trgId中应该有NULL值。

+0

plz分享获取创意的代码 – devpro

回答

1

你的想法是对的,找到所有使用find_all()函数的跟踪条目,然后将tr_trgId设置为null并保存它们。 或者你可以在MySQL中使用Forign按键事件来实现这一点ON在跟踪表中删除设置null。

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(); 

    }