CakePHP3 belongsTo NULL登録
CakePHP3.0 を使用して、顧客情報を登録するアプリケーションを作成しています。
顧客情報には言語カラムがあり、外部の言語テーブルのコードを参照しています。
顧客情報の言語カラムはNULLを許容します。
DB
[Table] client_entities
| language_code1 | char(2) | NULL YES | MUL |
| language_code2 | char(2) | NULL YES | MUL |
| language_code3 | char(2) | NULL YES | MUL |
| language_code4 | char(2) | NULL YES | MUL |
| language_code5 | char(2) | NULL YES | MUL |
| language_code6 | char(2) | NULL YES | MUL |
[Table] languages
| id | int(11) | NULL NO | PRI |
| code | char(2) | NULL NO | UNI |
CakePHPでは、Tableにアソシエーションの定義を追加しました。
(Controllerのindex()にも設定を追加していますが、edit()、update()は未変更です)
ClientEntitiesTable
public function initialize(array $config)
{
$this->belongsTo('Languages', [
'foreignKey' => 'language_code1',
'bindingKey' => 'code',
'joinType' => 'LEFT'
]);
..... continue
}
LanguagesTable
public function initialize(array $config)
{
$this->hasMany('ClientEntities', [
'foreignKey' => 'language_code1',
'bindingKey' => 'code'
]);
..... continue
}
この状態で、顧客情報の登録・更新処理において、言語カラム未設定でsubmitすると、
NULLの状態で送られた情報が内部で空文字''に変換されてしまいDBの参照整合性エラーが発生してしまいます。
Error情報
Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`cir`.`client_entities`, CONSTRAINT `client_entities_ibfk_7` FOREIGN KEY (`language_code2`) REFERENCES `languages` (`code`))
UPDATE client_entities SET language_code2 = :c0 WHERE id = :c1
解決方法として、TableクラスのbeforeSave()メソッドを内で空文字をNULLへ変換する処理を追加したのですが、
別のエラーが発生してしまいます。
Undefined variable: _SESSION [CORE\src\Network\Session.php, line 440]
どなたか、CakePHPにて外部参照制約のついているカラムへNULLを登録する方法をご教授願えませんでしょうか?