在 CodeIgniter 中,我想准备一个从表单返回的值,这样如果它是 a 0
,它实际上会被插入为NULL
。
我在控制器类之外创建了一个函数:
function prep_zero_to_null($int)
{
if ($int == 0)
{
return NULL;
}
else
{
return $int;
}
}
在表单验证时,我会:
$this->form_validation->set_rules('category_id', 'Category',
'required|integer|prep_zero_to_null');
但是,CI 仍然尝试'0'
在数据库中插入零,这打破了我的外键约束之一。
有趣的是,如果我在函数中替换NULL
为,例如,CI 确实会识别它并插入而不是. 所以我的准备函数确实被调用了,但是 CI 不会因此而允许它,而是将它转换为.25
prep_zero_to_null
25
'0'
NULL
'0'
我怎样才能达到我想要的?
编辑:对于那些想知道的人,该category_id
字段确实允许为空:
`category_id` int(10) unsigned DEFAULT NULL
确切的错误是:
INSERT INTO `articles` (`category_id`, `order`, `title`, `text`)
VALUES ('0', '0', 'test', 'test')
^
Should be NULL
Cannot add or update a child row: a foreign key constraint fails
(`db`.`articles`, CONSTRAINT `articles_ibfk_1` FOREIGN KEY
(`category_id`) REFERENCES `categories` (`id`)
ON DELETE SET NULL ON UPDATE CASCADE)