Codeigniter Activerecord更新方法拒绝插入NULL值

Joh*_*hnP 4 php mysql activerecord codeigniter

我正在使用Codeigniters Active记录库对我的数据库上的列执行更新.

这是表的SQL

CREATE TABLE `schedules` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`reservation_id` INT(11) NULL DEFAULT NULL,
`title` VARCHAR(255) NOT NULL,
`description` VARCHAR(512) NULL DEFAULT NULL,
`start_date` DATE NOT NULL,
`start_time` TIME NOT NULL,
`end_time` TIME NULL DEFAULT NULL,
`enabled` TINYINT(1) NULL DEFAULT '1',
`status` ENUM('OPEN','RESERVED') NULL DEFAULT 'OPEN',
PRIMARY KEY (`id`),
INDEX `fk_schedules_reservations` (`reservation_id`),
CONSTRAINT `fk_schedules_reservations` FOREIGN KEY (`reservation_id`) REFERENCES `reservations` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION
Run Code Online (Sandbox Code Playgroud)

)

我已经将reservation_id声明为nullable(reservation_id INT(11) NULL DEFAULT NULL)

问题是CI在创建语句时似乎不想发送NULL值.

$data['status'] = $this->Schedule->get_status_open();
$data['reservation_id'] = null; 
$this->Schedule->update($s_id, $data);
Run Code Online (Sandbox Code Playgroud)

这段代码只会生成以下错误消息

Error Number: 1452

Cannot add or update a child row: a foreign key constraint fails (`ethyme/schedules`, CONSTRAINT `fk_schedules_reservations` FOREIGN KEY (`reservation_id`) REFERENCES `reservations` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

UPDATE `schedules` SET `status` = 'OPEN', `reservation_id` = '' WHERE `id` = '4'
Run Code Online (Sandbox Code Playgroud)

据我所知,你所要做的就是将值设置为NULL,AR应该选择它是一个NULL值,但这似乎不是这里的情况.只是不断发送空值.

我是CI的新手,我还需要做任何其他工作吗?有任何想法吗?

Phi*_*eon 20

尝试:

$this->db->set('reservation_id', NULL);
Run Code Online (Sandbox Code Playgroud)

很可能是$ data方法不喜欢NULL.

  • 是的,我认为它可能是一个错误,但我知道这种方式工作.你能否将错误提交给BitBucket上的CodeIgniter问题跟踪器,我会尝试修复核心问题.此外,您可以根据需要混合$ data和 - > set(). (2认同)