Laravel雄辩-以最近的n个条目为例
我有一个模型Laravel雄辩-以最近的n个条目为例,laravel,Laravel,我有一个模型Login,带有userName和time字段。我正在尝试编写代码,让最后n个人登录 我尝试了许多似乎是最艰难的变化: $logins = Login::groupBy('userName') ->orderBy('time', 'desc') ->take($num)->get() ; 不幸的是,日期不是用户最近登录的日期。如果我删除orderBy,数据是有意义的,但此时它只按用户名排序。它需要按时间排序,才能成为最后n次登录 谢谢大家! 编辑: 如上所述,结果
Login
,带有userName
和time
字段。我正在尝试编写代码,让最后n个人登录
我尝试了许多似乎是最艰难的变化:
$logins = Login::groupBy('userName') ->orderBy('time', 'desc') ->take($num)->get() ;
不幸的是,日期不是用户最近登录的日期。如果我删除orderBy
,数据是有意义的,但此时它只按用户名排序。它需要按时间排序,才能成为最后n次登录
谢谢大家!
编辑:
如上所述,结果是用户首次登录的日期,然后给出最近10次“首次登录”。这意味着groupBy保留最早的日期。我不知道如何修复它,但也许这能帮助别人 编辑2: 现在根据ceejayoz的建议,我有:
$logins=Login::orderBy(DB::raw('MAX(
time)),'desc')->groupBy('userName')->orderBy('time','desc')->take($num)->get();//->sortByDesc(“时间”)
现在,它提供了最近登录的用户,但是在时间它仍然提供了他们的第一次登录。我可以将视图从使用时间更改为。。。表示最大值(“时间”)的内容(不确定它的标题),或者使用AS
以不同的名称获取它(尝试了它,但没有成功)
快到了!:) 您需要按用户记录的时间
列中的最大值排序
->orderBy(DB::raw('MAX(`time`)'), 'desc')
出于好奇,如果不是按时间的降序,它们返回的顺序是什么?当我删除orderBy
时,它会按用户名的字母顺序返回。好的,我觉得从你最初的问题中可以清楚地看出这一点。订购人怎么了?对不起,你说得对。事实上,它看起来很奇怪,几乎是随机的,但它不是——它很有趣。上面正在更新。等等,是关于什么的?啊,太近了!更新以上内容以获得更清晰的格式。您需要对SELECT
子句执行相同的操作。类似于->addSelect(DB::raw('MAX(time)AS maxTime'))
。或者,向存储此属性以供直接访问的用户模型添加属性。最终答案:logins=Login::addSelect(DB::raw('*,MAX(time)AS maxTime'))->orderBy(DB::raw('maxTime'),'desc')->groupBy('userName')->orderBy('time',desc')->take('num)->get()代码>这是我和拉威尔的第一天,我敢打赌有一种更雄辩(请原谅双关语)的方法可以做到这一点。改天吧!好的,无论谁需要它,您都可以删除第二个orderBy
。