Codeigniter Activerecord méthode de mise à jour refuse d'insérer la valeur NULL

Je suis en utilisant Codeigniters Active record de la bibliothèque pour effectuer une mise à jour sur une colonne sur ma DB.

Voici le code SQL de la table

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

)

J'ai déclaré reservation_id comme nullable (reservation_id INT(11) NULL DEFAULT NULL)

Le problème est que celui CI ne semble pas vouloir envoyer une valeur NULL lorsque je créer l'instruction.

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

Ce bout de code génère le message d'erreur suivant

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'

De ce que je sais, tout ce que vous avez à faire est de définir la valeur NULL et AR, doit reprendre que c'est une valeur NULLE, mais qui ne semble pas être le cas ici. Juste continue à envoyer des valeurs vides.

Je suis nouveau sur CI, dois-je faire autre chose pour le faire fonctionner? des idées?

Ceci s'est avéré être un non-problème. Le modèle de base que j'utilisais était à l'aide de xss_clean pour filtrer les données, et il a été de rendre méconnaissable en place des types de données comme NULL, TRUE, FALSE et ainsi de suite. Ajout d'une liste d'exclusion résolu le problème. Le ci-dessus est la bonne façon d'envoyer des données NULL

OriginalL'auteur JohnP | 2010-08-18