Laravel Eloquent - 最近的参赛作品

时间:2014-07-22 18:44:33

标签: laravel

我的模型Login包含字段userNametime。我正在尝试使用最后n个人登录Eloquent进行编码。

我已经尝试过很多关于看起来最直接的变种:

$logins = Login::groupBy('userName') ->orderBy('time', 'desc') ->take($num)->get() ;

不幸的是,日期不是用户最近的登录信息。如果我删除orderBy,数据是有意义的,但此时它只按userName排序。它需要按时间排序为最后n次登录。

谢谢!

修改

看起来如上所述,结果是用户首次登录的日期,然后提供10个最近的“首次登录”。
这意味着groupBy保留最旧的日期。我不知道如何修复它,但也许这可以帮助别人帮助。

编辑2:

现在使用ceejayoz的建议,我有:

$logins = Login::orderBy(DB::raw('MAX( {时间{1}}

现在它提供了最新用户登录但)'), 'desc')->groupBy('userName') ->orderBy('time', 'desc') ->take($num)->get() ;//->sortByDesc('time')仍然提供了他们的首次登录。我可以将我的视图从使用time更改为...代表MAX的内容('时间')(不确定它的标题是什么),或者使用time来获取不同的名称(尝试过,但我没有让它工作)。

几乎就在那里! :)

1 个答案:

答案 0 :(得分:1)

您需要按time列中的最大值订购用户的记录。

->orderBy(DB::raw('MAX(`time`)'), 'desc')