我想获取撰写最多文章的用户。我使用 ActiveRecord 以两种方式做得很好,如下所示:
$table = Articles::find()
->select('articles.*, COUNT(*) AS cnt')
->with('user','userDetails')
->groupBy('articles.user_id')
->orderBy(('cnt DESC'))
->limit(10)
->offset($offset)
->all();
并使用如下查询:
$query = (new Query())
->select('articles.user_id, COUNT(*) AS num_articles')
->from('articles')
->join('LEFT JOIN', 'user_details', 'user_details.user_id = articles.user_id')
->groupBy('articles.user_id')
->orderBy('num_articles DESC')
->limit(10)
->offset($offset)
->all();
- 问题是 ActiveRecord 为我提供了更多所需信息
userDetails
我需要的。但我没有得到应该在cnt
上的用户文章数量 - 通过查询,我得到
user_id
以及文章数量。但我没有通过加入userDetails
来让它工作。 。所有这些都不起作用:LEFT JOIN
,RIGHT JOIN
,INNER JOIN
.
我有兴趣解决这两个问题以供学习,但具体而言,我需要解决 ActiveRecord 问题的帮助。
最佳答案
好吧,我为 ActiveRecord 解决了这个问题。 ActiveRecords 需要模型中的 public $var;
。因此,要获得金额,您必须将提到的 public... 添加到您的模型中,以便在我的情况下:
public $cnt;
扩展了Articles
的ActiveRecord
现在我可以通过我的问题中给定的请求访问它。但这只是解决了第一点。我仍然对第二种更复杂查询的方式感兴趣。
关于php - 通过事件记录或查询获取拥有最多文章的用户及其数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701450/