首页 > 解决方案 > 我想删除条件数据。如果数据在另一个表中作为外键可用,则不要删除它

问题描述

我有 3 个表,1 个用于博主,博主 ID 作为外键保存在活动表中,还保存在类别表中作为外键,这实际上是联结表。

我希望当博主ID不在compaign表中时,只需将其删除,但是当它在compaign表中时,不要删除它并粘贴错误..

通过我的代码:当我删除博主并且它的数据在compaign表中时,它只是从类别表中删除数据(这是博主表的连接表)

这是我的模型:

public function delete($id){


      if($id != $this->db->query("SELECT blogger_id FROM tbl_campaign_detail WHERE blogger_id = $id"))
    {
         $query=$this->db->query("DELETE FROM tbl_bloggers_cat WHERE blogger_id = $id AND Cat_id >2000");

        $this->db->where('blogger_id', $id);
        $this->db->delete('tbl_bloggers');
        if($this->db->affected_rows() > 0){
        return true;
        }else{
        return false;
        }
    }
    else
    {

    }


}

这是我的控制器:

public function delete($id){
    $result = $this->bm->delete($id);
    if($result){
        $this->session->set_flashdata('success_msg', 'Record deleted successfully');
    }
    else{
        $this->session->set_flashdata('error_msg', 'Fail to delete record');
    }
    redirect(base_url('blogger/index'));
}

查看代码:

<?php $id = $blogger->blogger_id;  ?>
                        <a href="<?php echo base_url('blogger/delete/'.$id); ?>" onclick="return confirm('Do you want to delete this record?');">
                            <span class="glyphicon glyphicon-trash"></span>
                        </a>

我希望当我删除博主的记录并且它的 id 作为外键在 compaign 表中时,不要删除此记录,因为显示错误消息。

但是通过这段代码:当我这样做时,它会从类别表中删除博主的类别,其中博主 id 作为外键传递..(这是博主和另一个表的连接表)

标签: phpmysqlcodeignitercodeigniter-3

解决方案


您需要像这样更改删除功能

 function delete($id){
    $result = $this->db->query("SELECT blogger_id FROM tbl_campaign_detail WHERE blogger_id = $id")->row();
    if(!$result){
           $this->db->query("DELETE FROM tbl_bloggers_cat  WHERE blogger_id  = $id AND Cat_id > 2000");
           if($this->db->affected_rows() > 0){
                 return true;
            }
    }
    return false;
}

推荐阅读