Eloquent:查找具有最大数据透视数据的用户(Alltime和月份)

时间:2016-01-25 00:18:39

标签: laravel laravel-5 eloquent

还在和Laravel一起学习,而且我正在与Eloquent挣扎。

我有这两个表,用户和内容。外键content.user_id已正确设置,我想查询两件事:

  • 具有最大内容(带计数)的用户
  • 过去30天内具有最大内容的用户(也包括计数)。

我提出了一个Eloquent查询,但我找不到任何东西。

1 个答案:

答案 0 :(得分:1)

从我能够讲述的内容来看,你不能从相关对象中约束根对象的结果。我的意思是,您不能根据内容结果限制提取的用户。考虑到这一点,您需要从另一方Content处理这些查询。

Content::groupBy('user_id')
    ->orderByRaw('count(`posts`.`id`) desc')
    ->first()->user;

这应该生成以下2个查询:

SELECT * 
  FROM `contents` 
GROUP BY `user_id` 
ORDER by count(`posts`.`id`) DESC
LIMIT 1

SELECT * FROM `users` WHERE `users`.`id` = ? LIMIT 1

基于时间限制也很容易:

$date = (new DateTime('-1 month'))->format('Y-m-d H:i:s');
Content::where('created_at', '>=', $date)
    ->groupBy('user_id')
    ->orderByRaw('count(`posts`.`id`) desc')
    ->first()->user;