Каскадное обновление или удаление — кохана

У меня есть две таблицы групп и отслеживания, и они связаны. Я хочу удалить записи групп и удалить внешний ключ в Tracking, но я не знаю, как удалить или обновить значение 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() 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.

-3

Решение

Ваша идея верна, чтобы найти все записи отслеживания, используйте функцию find_all (), а затем установите для tr_trgId значение null и сохраните их.
Или вы можете достичь этого в MySQL, используя события Forign key ON delete set 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();

}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]