Cakephpは命名規則など、規約が強めのフレームワークの一つだと思います。(まあ、他のフレームワークはさわりしか知らんねんけど)
例えば、Laravelは凄い人気なんだけども、コードを書く上では良くも悪くも柔軟性が強くて、オレオレコードになりがちな印象です。なので、上級者が使うとより保守性の強いシステムが出来上がりそうですが、大人数で開発する上では、誰もが上級者というわけではないと思うので、コード品質がバラバラになりそうです。
その点、Cakephpは規約が強いので、ある程度のルールに沿って書かないと動かない。Laravelよりもコード品質は他の人が書いても近いものになると思います。(それでも差が出ます)
(まあ、でも皆メシ食ってく上ではLaravelなんでしょうな。案件が多いだろうから)
と、前置きが完全に話がそれました。
Cakephpでcontain(アソシエーション)先のデータってどう取得できるのか?
という基本的な問いです。
Cakephpは4へバージョンが上がるにつれて、ファイル名が複数形になったり(例えば、Cake2のモデルの命名規則はModel.phpで単数形だけど、Cake3からはモデルはTableとEntityに分かれ、Tableは複数形、Entityは単数系)
そして、メソッドの呼び出しも
Cake2: $this->Model->hoge()
Cake3以降: $this->Models->hoge()
とか複数形なったりしますね。
そこでfind()->contain(['Models'])
などでcontain先のデータのアクセスの方法は、スネーク単数形になります。
例えば、DBのテーブル名がhoge_fugasだった場合、find()後、$entity->hoge_fuga->titleでアクセス(※titleカラムがあるとする)
結構、Cakephp3以上は全般的にキャメルケース、複数形よりのイメージが強いので「そこは単数形でくるんかい」と一瞬思ったので。