【问题标题】:Cascade Update or Delete - kohana级联更新或删除 - kohana
【发布时间】:2016-09-15 08:40:08
【问题描述】:

我有两个表 Groups 和 Tracking 并且它们是连接的。我想删除 Groups 记录,并删除 Tracking 中的外键,但我不知道如何删除或更新这个外键为 NULL 值。我不想从 Tracking 中删除所有记录。任何的想法?感谢您的帮助。

 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)

在跟踪组中:

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

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

【问题讨论】:

  • 请分享获取想法的代码

标签: php kohana-3 kohana-orm kohana-3.2 kohana-3.3


【解决方案1】:

您的想法是对的,使用 find_all() 函数查找所有跟踪条目,然后将 tr_trgId 设置为 null 并保存它们。 或者您可以在 MySQL 中使用外键事件 ON delete set null in Tracking table 来实现这一点。

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

    } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多