[CakePHP4]ModelをcontainしたらCannot convert value of type array to string になる場合

CakePHP

CakePHP4であるモデルをcontain()で追加したら、下記のエラーになりました

Cannot convert value of type array to string

原因
テーブルに複合PK使っていました。
その場合、接続元のテーブルをどのカラムでbindするかも指定する必要があります。
こんな感じ

$his->hasMany('モデル名')
   ->setForeignKey('接続先テーブルのカラムID')
   ->setBindingKey('自分のモデルのカラム(idとか)'); //<- Required!

Cake4あたりから使えるようになったのは知っていましたが、特に使う用事はなかったので使っていませんでした。
普段(PKが1つのオーソドックスなテーブル)はPKが自動的に渡されるので特に書く必要はないのです。
bindするカラムは1つじゃないとダメなので、上記のエラーメッセージの個所で、配列のPKを渡されてしまうため、”型が違う”というエラーになってしまっていました。

これエラーメッセージが不親切すぎるよー。

これ調べても全くヒットしなかった。
英語でもなかったので、日本語を解せない人向けに英語でも一言書いておく。
When using a composite primary key, specify the key to bind with the setBindingKey() method!

 

タイトルとURLをコピーしました