首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查用户是否在Laravel中联机

检查用户是否在Laravel中联机
EN

Stack Overflow用户
提问于 2019-07-22 10:36:30
回答 2查看 212关注 0票数 1

我是拉勒维尔的初学者。我在我的项目中使用了Laravel5.8。我有一个模型:

代码语言:javascript
复制
class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
    public static $roles = [];


    protected $fillable = ['last_activity', 'enable', 'name', 'surname', 'email', 'email_verified_at', 'password', 'counter', 'url_address', 'isCompany', 'isMailing'];


    protected $hidden = [
        'password', 'remember_token',
    ];

    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }

    public function mainRole()
    {
        return $this->hasOne('App\Role');
    }

    public function comments()
    {
        return $this->hasMany('App\Comments');
    }


    public function hasRole(array $roles)
    {

        foreach ($roles as $role) {

            if (isset(self::$roles[$role])) {
                if (self::$roles[$role]) return true;

            } else {
                self::$roles[$role] = $this->roles()->where('name', $role)->exists();
                if (self::$roles[$role]) return true;
            }

        }
        return false;
    }

    public function loginHistory()
    {
        return $this->hasMany('App\UserLoginHistory');
    }

    public function companies()
    {
        return $this->belongsTo('App\Companies', 'company_id');
    }


    public function images()
    {
        return $this->hasManyThrough('App\UploadedFiles', 'App\User', 'id', 'photoable_id');
    }


    public function scopeOfRoleType($query, $types)
    {
        return $query->whereHas('roles', function ($q) use ($types) {
            $q->whereIn('name', $types);
        });
    }



}

在last_activity -我有日期,例如2019-07-16 10:26:12

我需要在我的小树枝页上展示:

代码语言:javascript
复制
@foreach ($usersList as $user)
User name: $user->name is now ...... (offline or online)

@endforeach

我想看看用户是在线的还是离线的。

我在想这样的事情:

代码语言:javascript
复制
public function isOnline()
        {
            return .....
        }

但我不知道如何检查这个活动:

请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-22 10:48:59

这取决于你如何定义在线。Http是一种无状态协议。

但是,您可以将在线定义为在最后五分钟内处于活动状态。这样您就可以像这样实现这个函数:

代码语言:javascript
复制
public function isOnline(): bool
{
    return $this->last_activity->gt(Carbon\Carbon::now()->subMinutes(5));
}

还要确保将last_activity标记为日期:

代码语言:javascript
复制
protected $dates = ['last_activity'];

随着应用程序的增加,我会考虑另一种解决方案,而不是将数据库中的所有用户加载到内存中。

票数 1
EN

Stack Overflow用户

发布于 2019-07-22 10:48:01

我想你所说的“在线”是指使用网站并与之互动。您必须确定一个时间间隔,在这个时间间隔内,用户可以被视为“联机”或“脱机”而不再交互。也许..。十分钟?将“最后一次活动”字段与当前时间进行比较,以查看它们是否活动。用于exmaple Carbon::now()以获取当前时间并进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57144174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档