В CodeIgniter я хочу подготовить значение, возвращаемое из формы, так что если оно равно 0
, оно будет фактически вставлено как NULL
.Подтверждение значения «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
, скажем, 25
в функции prep_zero_to_null
, CI действительно распознает его и вставить 25
вместо '0'
. Поэтому моя функция prepping действительно вызвана, но CI не позволит NULL
в результате этого и вместо этого преобразует ее в '0'
.
Как я могу достичь того, чего хочу?
Edit: Для тех, кому интересно, то 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)
Я уверен, что вы должны возвращать строку null вместо константы: 'return 'NULL';' Но опять же, если это указано в запросе, вы не получите желаемого эффекта. – nickb
Ну, я думаю, что соответствующий столбец базы данных не допускает значений NULL и имеет значение «0», поскольку это значение по умолчанию. –
Столбец таблицы разрешает NULL? –