首先让我解释一下表结构:
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| firstname | varchar(255) | NO | | NULL | |
| name | varchar(255) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
通过外键从另一个表引用id字段。
假设我的模型中有一个函数,如下所示:
public function delete_user($id) {
return $this->db->delete('users', array('id' => $id));
}
当从另一个表引用此用户时,它应该抛出错误。 “糟糕”的是,Codeigniter实际上在整页上显示错误:
Error Number: 1451
Cannot delete or update a parent row: a foreign key constraint fails (`testing`.`users_link`, CONSTRAINT `users_link_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
DELETE FROM `users` WHERE `id` = '1'
有没有办法让delete_user函数返回FALSE而不是显示错误?我想通知用户他们必须先做其他事情。我尝试使用事务并返回transaction_status,但仍然会抛出错误。
答案 0 :(得分:8)
找到行
$db['default']['db_debug']
并将其设置为FALSE。这将阻止Codeigniter在屏幕上打印错误。
同样在删除功能中,您可以查看:
if ($this->db->_error_number() == 1451)
如果发生这种情况,你需要做一些特别的事情。
答案 1 :(得分:0)
我以这种方式使用Codeigniter 3.0
型号
User
控制器
/*
* function to delete user
*/
function delete_user($id)
{
if ( ! $this->db->delete('users', array('id' => $id)))
{
return $this->db->error();
}
return FALSE;
}