Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel雄辩-以最近的n个条目为例_Laravel - Fatal编程技术网

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