我有3个表,1个是bloggers表,blogger id作为外键保存在campaign表中,也作为外键保存在categories表中,实际上是连接表。
我希望当blogger id不在compign表中时,只需删除它,但当它在compign表中时,则不删除此项并粘贴错误。。
根据我的代码:当我删除blogger并且它的数据在compign表中时,它只是从categories表(blogger表的连接表)中删除数据
这是我的模型:
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>
我希望当我删除blogger的记录,并且它的id作为外键在compign表中时,不要删除这个记录,如错误消息所示。
但是通过这个代码:当我这样做的时候,它会从类别表中删除blogger的类别,其中bloggers id作为外键传递(这是blogger和另一个表的连接表)
2条答案
按热度按时间5jvtdoz21#
您可以直接通过数据库模式设计来完成这项工作,而不是在php中完成。定义外键时,只需
on delete restrict
:现在,如果您尝试删除表中的记录
blogger
但表中有子记录campaign
,则mysql将阻止删除并返回错误。hmtdttj42#
您需要像这样更改delete函数