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 YYY
、cake\bake model XXX
でTableを再生成する。
アソシエーションが追加されたか確認してください。
アソシエーションが無い場合2:手動追加
命名規則の問題や一部のhasMany,belongsToはBakeでうまくアソシエーションが生成できない場合があるようです。
その場合は、手動で追加します。
ただし、次テーブル定義を変更した際にBakeで上書きしないように注意しましょう。
以上です。