LoginSignup
1
2

More than 5 years have passed since last update.

CakePHP3にてThe XXX association is not defined on YYY.

Posted at

CakePHPでテーブルを結合するときはクエリービルダーで以下のように記述します。
マニュアル

$query = $this->YYY->find()->contain(['XXX']);

その際にThe XXX association is not defined on YYY.が発生してしまった場合の対応方法です。

確認1 DB上で外部キーが設定されているか

MySQLの場合はSHOW CREATE TABLE YYYで確認ができます。

確認2 CakePHP上でTableにアソシエーションが設定されているか

YYYTableとXXXTableにそれぞれへのアソシエーション(hasOne等)があるか確認します。(マニュアル

アソシエーションが無い場合1:Bakeで生成

cake\bake model YYYcake\bake model XXXでTableを再生成する。
アソシエーションが追加されたか確認してください。

アソシエーションが無い場合2:手動追加

命名規則の問題や一部のhasMany,belongsToはBakeでうまくアソシエーションが生成できない場合があるようです。
その場合は、手動で追加します。
ただし、次テーブル定義を変更した際にBakeで上書きしないように注意しましょう。

以上です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2