我使用CodeIgniter
开发我的应用程序,我为此表插入了一个约束:
约会
CREATE TABLE IF NOT EXISTS `appointments` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`GroupID` int(11) NOT NULL,
`book_datetime` datetime DEFAULT NULL,
`start_datetime` datetime DEFAULT NULL,
`end_datetime` datetime DEFAULT NULL,
`notes` text,
`hash` text,
`is_unavailable` tinyint(4) DEFAULT '0',
`guid_users_provider` char(36) DEFAULT NULL,
`guid_users_customer` char(36) DEFAULT NULL,
`guid_services` char(36) DEFAULT NULL,
`id_google_calendar` text,
`resources_guid` char(36) DEFAULT NULL,
`data` int(11) NOT NULL,
`lastUpdated` varchar(36),
PRIMARY KEY (`id`),
KEY `guid_users_customer` (`guid_users_customer`),
KEY `guid_services` (`guid_services`),
KEY `guid_users_provider` (`guid_users_provider`),
KEY `resources_guid` (`resources_guid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
资源
CREATE TABLE IF NOT EXISTS `resources` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`GUID` char(36) NOT NULL UNIQUE,
`descrizione` varchar(255) NOT NULL,
`sigla` varchar(255) NOT NULL,
`planning` varchar(255) NOT NULL,
`hex_color` varchar(255) NOT NULL,
`data` int(11) NOT NULL,
`lastUpdated` varchar(36),
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
这是约束:
ALTER TABLE `appointments`
ADD CONSTRAINT `appointments_ibfk_5` FOREIGN KEY (`resources_guid`) REFERENCES `resources` (`GUID`) ON DELETE CASCADE ON UPDATE CASCADE;
架构是正确构建的,但问题是当我尝试通过我的应用程序插入记录时,特别是字段resource_guid
有时是NULL
。现在,如果我在PhpMyAdmin
中插入一条记录进行测试,在appointments
表中并将resource_guid
设置为空,则记录会成功添加,但是当我从我的应用程序中插入记录时CodeIgniter
我收到此错误:
无法添加或更新子行:外键约束失败(
scheduler
。appointments
,CONSTRAINTappointments_ibfk_5
FOREIGN KEY(resources_guid
)参考resources
(GUID
)ON DELETE CASCADE ON UPDATE CASCADE)\“,\”previous \“:null,\
现在这是查询的内容array
:
array(12) {
["guid_users_provider"]=>
string(36) "EE36D621-5E29-4674-81CB-B98622153E0C"
["start_datetime"]=>
string(19) "2015-12-30 23:19:00"
["end_datetime"]=>
string(19) "2015-12-31 00:45:00"
["notes"]=>
string(0) ""
["resources_guid"]=>
string(4) "null"
["is_unavailable"]=>
bool(false)
["guid_users_customer"]=>
string(36) "CDB8C010-7E51-4478-A341-F077E0460C88"
["guid_services"]=>
string(36) "31C40686-D72C-4361-B211-DCB2223552A9"
["book_datetime"]=>
string(19) "2015-12-31 01:12:39"
["hash"]=>
string(32) "5a9882faec12ab5bacb3445382176463"
["lastUpdated"]=>
string(27) "31-12-2015 10:12:39.5659760"
["GroupID"]=>
int(1)
}
如何看到字段resource_guid
为NULL。现在我不理解的是(如果我将PhpMyAdmin
中的resource_guid
设置为NUll
,那么空字段,不会显示任何错误,同样来自我的应用程序上面的错误出现)。
此数组传递给insert
的{{1}}方法,如下所示:
CodeIgniter
如何在NULL时插入资源?我的意思是,在我的db表结构中没有空值的重新限制,因此if(!$this->db->insert('appointments', $appointment))
{
throw new Exception("Can't add record=> " . $this->db->_error_message());
}
表中的appointments
表设置为DEFAULT NULL
。有人可以帮帮我吗?
答案 0 :(得分:0)
在Appointments
表中,您已将默认值设为NULL
相反,请将empty
值设为DEFAULT。
resources_guid` char(36) NOT NULL DEFAULT ''
要将现有列设为NOT NULL,请使用MODIFY
ALTER TABLE Appointments MODIFY resources_guid char(36) NOT NULL DEFAULT ''
答案 1 :(得分:0)
查看您的输入resources_guid
["resources_guid"]=> string(4) "null"
它是string
,其值为"null"
,而不是boolean
NULL
。
请检查您是如何创建该输入的。确保返回实际的NULL
值。如果您无法控制,则可能需要通过以下方式手动更改它:(假设数组为$appointment
)
if($appointment["resources_guid"] == "null") {
$appointment["resources_guid"] = NULL;
}
关于
FOREIGN KEY
,它应该像您设置的那样工作。子字段中的NULL
值应该没有问题(除非该字段设置为NOT NULL
)。