我相信这更像是一个 SQL 问题。使用数据库查询生成器:
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”的模型,链接到“歌曲”表,链接到“关键字”表的“关键字”模型以及“连接”表中的外键“song_id”和“keyword_id” ' 分别为每个模型。