0
CodeIgniter では、フォームから返された値が である場合、実際には として挿入されるように準備したいと考えてい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'
はデータベースと同様にゼロを挿入しようとしますが、これは外部キー制約の 1 つを破ります。
興味深いことにNULL
、たとえば関数25
内でを置き換えるとprep_zero_to_null
、CI は実際にそれを認識し、25
代わりにを挿入し'0'
ます。したがって、私の準備関数は実際に呼び出されますが、CI はNULL
その結果として許可せず、代わりに に変換し'0'
ます。
どうすれば私が望むものを達成できますか?
編集:疑問に思っている人のために、category_id
フィールドはnullを許可します:
`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)