我相信這是更多的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的內部工作。
我假設你使用的是被稱爲「宋」的模式,連接到一個「歌曲」表,「關鍵字」模型鏈接到「關鍵字」表和「關係」表中的外分別爲每個模型鍵「song_id」和「keyword_id」。