これはよりSQLの質問だと思います。DB クエリビルダーを使用する:
DB::select('songs.*')->select(array('COUNT("keywords.id")', 'nconnections'))
->from('songs')
->join('connections', 'LEFT')->on('connections.song_id', '=', 'songs.id')
->join('keywords', 'LEFT')->on('connections.keyword_id', '=', 'keywords.id')
->group_by('songs.id')
->order_by('nconnections')
->as_object('Model_Song')
->execute();
またはSQLで
SELECT `songs`.*, COUNT(`keywords`.`id`) AS `nconnections` FROM songs
LEFT JOIN `connections` ON `connections`.`song_id` = `songs`.`id`
LEFT JOIN `keywords` ON `connections`.`keyword_id` = `keywords`.`id`
GROUP BY `songs`.`id` ORDER BY `nconnections`
必要な結果を返す必要があります。
nconnections
曲のモデルで呼び出されるアクセス可能なプロパティが必要になる場合があります。これを行う最も簡単な方法は、パブリック メンバーを追加して、ORM の内部動作を改ざんしないようにすることです。
「songs」テーブルにリンクされた「Song」というモデル、「keywords」テーブルにリンクされた「Keyword」モデル、および「connections」テーブルの外部キー「song_id」および「keyword_id」を使用していると仮定しています' 各モデルごとにそれぞれ。