Cakephp PHP WEB開発

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

※本サイトはPR表記を含みます。

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); // 外部制約キーの違反エラーだったものが、無事に保存できるようになった

-Cakephp, PHP, WEB開発
-,