2016-09-15 153 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(); 

    }