2016-09-15 10 views
-3

두 개의 테이블 그룹 및 추적이 있으며 연결되어 있습니다. 그룹 레코드를 삭제하고 추적에서 외래 키를 삭제하고 싶지만이 외래 키를 NULL 값으로 삭제하거나 업데이트하는 방법을 모르겠습니다. 추적에서 모든 레코드를 삭제하고 싶지 않습니다. 어떤 아이디어? 도와 주셔서 감사합니다. 추적 표에서 계단식 업데이트 또는 삭제 - 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(); 

    } 

내가 가진 : TrackingGroups에서

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

:

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로 설정하고 저장하십시오. 또는 Tracking 테이블에서 Forign 키 이벤트 ON delete set null을 사용하여 MySQL에서이를 수행 할 수 있습니다.

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

    }