我有 2 个表:视频和喜欢
video 表有字段:id, title ..
喜欢表有字段:id、video_id、user_id
我想获得最喜欢的 10 个视频。 我可以通过命令在 sql 中完成:
SELECT videos.*, COUNT( likes.video_id ) AS countlike
FROM videos LEFT JOIN likes ON videos.id = likes.video_id
GROUP BY videos.id
ORDER BY countlike DESC
Limit 10
我如何使用 yii 2 在 ActiveRecord 中实现它
如有任何帮助,我将不胜感激。
提前致谢!
最佳答案
首先,您应该为 video
和 likes
表创建 ActiveRecord 类,以简化操作。
目标是创建以下两个类 class Video extends\yii\db\ActiveRecord
和 class Likes extends\yii\db\ActiveRecord
。
要轻松做到这一点,您应该查看 gii 实用程序,它将为您完成(可在 yourdomain/gii/model 获得)。为您的两个表填写表格,您就完成了。
然后你应该可以写下你的请求了:
$query = Video::find()
->select(['video.*', 'COUNT(likes.video_id) AS countlike'])
->join('LEFT JOIN', Likes::tableName(), 'videos.id=likes.video_id')
->groupBy('videos.id')
->orderBy(['countlike' => SORT_DESC])
->limit(10);
$data = $query->all();
在我看来,使用 ActiveRecord 处理复杂请求并没有什么神奇之处。但它可能会避免错误。
我强烈建议阅读 ActiveQuery 文档以获取有关上述方法参数的更多信息。 http://www.yiiframework.com/doc-2.0/yii-db-activequery.html
希望对您有所帮助。
关于php - 从 yii 2 中的其他表按计数(*)排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30753237/