Codeigniter外键约束检查

时间:2012-05-05 15:46:17

标签: codeigniter constraints

首先让我解释一下表结构:

+-----------+--------------+------+-----+---------+----------------+
| 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,但仍然会抛出错误。

2 个答案:

答案 0 :(得分:8)

config.php文件中的

找到行

$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;
}