gpt4 book ai didi

php - Laravel session 查询唯一用户

转载 作者:行者123 更新时间:2023-11-29 11:57:37 24 4
gpt4 key购买 nike

当用户从多台计算机登录我的网站时,我注意到我的应用程序中存在一个错误,它们在登录列表中显示两次。我设法通过添加 groupBy('user_id') 我的查询,但是我现在注意到其他问题:用户的最后一个事件字段仅更新其中的 1 个。

return $query->whereNotNull('user_id')->with('user')->groupBy('user_id')->get();

为了让这一点更清楚,在添加 groupBy 之前,假设用户 Bob 在 2 个位置登录。我登录的用户将如下所示:

Bob 上次事件时间为 1 小时前,Bob 上次事件时间为 6 分钟前

但是,使用 groupBy 时,可能会显示以下内容:

Bob 上次事件时间为 1 小时前

尽管最新事件是 6 分钟前。我尝试运行 sortBy('last_activity'),但是升序和降序都未能解决此问题。有人有什么想法吗?

谢谢。

最佳答案

很难按原样回答这个问题,因为您没有解释在该表中存储的内容以及如何存储它。我猜您使用数据库 session 驱动程序?

无论如何,每个用户 session 对于给定位置都是唯一的。这就是当用户在多个位置登录时您会得到 2 个条目的原因。如果此处的“位置”不与其他位置共享 cookie(例如,私有(private)浏览窗口就足够了),则该“位置”被视为不同。 Laravel 中的 session 由 session cookie laravel_session 标识。

对于“上次事件”时间戳,我的建议是将其直接存储在您的 User 模型中,并在用户访问您的网站时更新它。与尝试从事件 session 中重建信息相比,将这种独特的信息保留给用户更有意义。此外,过时的 session 最终会被删除,并且用户的信息将会丢失。

更新

group byaggregate functions一起工作。你想要的是这样的:

SELECT user_id, MAX(last_activity) 
FROM SessionTable WHERE user_id IS NOT NULL
GROUP BY user_id

使用查询生成器:

\DB::table('session_table')
->select('user_id', \DB::raw('max(last_activity) as last_activity'))
->whereNotNull('user_id')
->groupBy('user_id')
->lists('user_id', 'last_activity');

应该返回类似这样的内容:

[
'user_id1' => 'last_activity1',
'user_id2' => 'last_activity2',
...
]

关于php - Laravel session 查询唯一用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com