CakePHPでデータベースの特定のテーブルから情報を取得するときに、contain(“RelatedTable”)を指定すると関連するデータも同時にロードすることができます。 この関連するデータに基づいてfindを実行してやりたい時、containで指定したテーブルに対してmathcing()で値を絞ることができます。
例えば
$target_id = 123; $Articles->find()->contains(['Comments'])->matching('Comments', function($q) use ($target_id){ return $q->where(['Comments.id'=>$target_id]);});
のようにArticleテーブルにCommentテーブルを含めてCommentテーブルのidが123と一致する記事を取得することができます。
matching内部では無名関数を用いるので、idをある引数に基づいて取得したいときなどは変数をuse()を使って渡すようにしましょう。