CakePHP3: アソシエーションしているテーブルのデータを`extract`や`select`したい場合

こんな需要があるのかどうかわからないのですが、実験していて出来たので共有です

前提条件

データ

postsというブログの記事を管理するテーブルと、 post_imagesという記事に対してアップロードした画像を管理するテーブルがあるとしましょう:

posts

id title
1 新型のレクサスLSを試乗してきました
2 ステップワゴンスパーダ(ハイブリッド)を試乗してきました

post_images

id filename post_id
1 LS外観.jpg 1
2 LS内装.jpg 1
3 スパーダ外観.jpg 2
4 スパーダ内装.jpg 2
5 スパーダエンジンルーム.jpg 2

得たい結果

この2つのテーブルを一回で持ってきて、かつ、filenameのカラムを抜き出したいとします。 つまり次のデータが欲しいとします:

LS外観.jpg
LS内装.jpg
スパーダ外観.jpg
スパーダ内装.jpg
スパーダエンジンルーム.jpg

動くケース

matchingとextractを使う場合

$posts = $this->Posts->find()
                     ->matching('PostImages')
                     ->extract('_matchingData');

foreach($posts as $post){
    echo $post['PostImages']->filename;
}

matchingとselectを使う場合

$posts = $this->Posts->find()
                     ->matching('PostImages')
                     ->select(['id','PostImages.post_id','PostImages.filename']);

foreach($posts as $post){
  echo $post->_matchingData['PostImages']->filename;
}

leftJoinWithとselectを使う場合

$posts = $this->Posts->find()
                     ->leftJoinWith('PostImages')
                     ->select(['PostImages.filename'])
                     ->all();

foreach($posts as $post){
  echo $post->_matchingData['PostImages']->filename;
}

動かないケース

containでextractもしくはselectを使う場合

やり方がわかりませんでした。 containはjoinをしないで、できないのか?

leftJoinWithとextractを使う場合

やり方がわかりませんでした。