我的模型Login
包含字段userName
和time
。我正在尝试使用最后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
来获取不同的名称(尝试过,但我没有让它工作)。
几乎就在那里! :)
答案 0 :(得分:1)
您需要按time
列中的最大值订购用户的记录。
->orderBy(DB::raw('MAX(`time`)'), 'desc')