Cakephpにて保存処理をする際に、以下のようなエラーに遭遇しました。
error
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
本エラーは「外部キー制約」の違反でエラーとなっていて、「外部キーとなるカラムに入る値は、参照するテーブルのカラムに存在する値しか入れてはいけない」と言う制約を課すものということです(引用)https://code-bug.net/entry/foreign-key-1452-error/
つまり、hoge_id
に入る値は hoges
テーブルの id
カラムにしか存在しない値しかいれてはいけない、というものらしいです。
救いとして MySQLは例外的に外部キー制約に対し「NULLを許容していた」。これを利用する形にして、エラーを回避することに成功しました。
対応例: MySQLは外部キー制約にNULLを許容している
// 例: MySQLは外部キー制約にNULLを許容しているので存在しない場合、NULLを代入 $data['hoge_id'] = empty($data['hoge_id']) ? null : $data['hoge_id']; $entity = $this->Hoges->newEntity($data); $this->Hoges->save($entity); // 外部制約キーの違反エラーだったものが、無事に保存できるようになった