Laravel 4.2需要帮助

时间:2017-01-31 21:30:45

标签: laravel laravel-4.2

我在HomeController.php中有这段代码,它位于public function home()块中

//Fetch Users Online
$online = DB::table('users')->where('online','1')->get(); 

//Get All Users Online Count
$num_online = DB::table('users')->where('online','1')->count();

//Get All ADMIN Online Count
$admin_online = DB::table('users')->where('online','1')->where('group_id','4')->count();

//Get All MODS Online Count
$mod_online = DB::table('users')->where('online','1')->where('group_id','6')->count();

//Get All VIP Online Count
$vip_online = DB::table('users')->where('online','1')->where('group_id','8')->count();

//Get All UPLOADER Online Count
$uploader_online = DB::table('users')->where('online','1')->where('group_id','7')->count();

//Get All MEMBERS Online Count
$member_online = DB::table('users')->where('online','1')->where('group_id','3')->count();

在home.blade.php这里传递

<div class="col-md-10 col-sm-10 col-md-offset-1">
<div class="clearfix visible-sm-block"></div>
<div class="panel panel-default">
<div class="panel-heading"><h4>Online Users <span class="badge">{{ $num_online }}</span></h4></div>
<div class="panel-body">
@foreach($online as $o)
<span class="badge-user group-member">
{{ $o->username }}
</span>
@endforeach
</div>
<div class="panel-footer">
<div class="row">
<div class="col-sm-12">
<span class="badge-user group-member">Member ({{ $member_online }})</span> <span class="badge-user group-uploader">Uploader ({{ $uploader_online }})</span> <span class="badge-user group-vip">VIP ({{ $vip_online }})</span> <span class="badge-user group-staff">Mod ({{ $mod_online }})</span> <span class="badge-user group-su">Admin ({{ $admin_online }})</span>
</div>
</div>
</div>
</div>
</div>
<!-- /Online Users -->

我的问题是在我的数据库中的用户表中,我有一个名为online的在线专栏。 0表示离线,1表示在线。如果手动将用户在线状态从零更新为1,则它们将显示在上面显示的ONLINE块中。但是我该如何自动化呢?如果用户将其设置登录为1,并且他们将其设置注销为0。

任何帮助都将受到赞赏.....

我正在运行laravel 4.2并猜测这将更容易在5.4中完成 我害怕升级,甚至不想自己尝试。

2 个答案:

答案 0 :(得分:1)

您可以通过创建和收听活动来实现这一目标。

Event::listen('auth.login', function($user)
{
    $user->online = 1;

    $user->save();
});

Event::listen('auth.logout', function($user)
{
    $user->online = 0;

    $user->save();
});

请按照laravel documentation了解详细信息

答案 1 :(得分:0)

您可以检查用户会话,当您使用数据库驱动程序进行会话时,会有一个名为last_activity的列,如果用户在15分钟内没有完成任何操作,您知道它处于脱机状态。

您不能依赖于用户是否退出。不是每个人每次都这样做。