我是拉勒维尔的初学者。我在我的项目中使用了Laravel5.8。我有一个模型:
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
我需要在我的小树枝页上展示:
@foreach ($usersList as $user)
User name: $user->name is now ...... (offline or online)
@endforeach我想看看用户是在线的还是离线的。
我在想这样的事情:
public function isOnline()
{
return .....
}但我不知道如何检查这个活动:
请帮帮忙。
发布于 2019-07-22 10:48:59
这取决于你如何定义在线。Http是一种无状态协议。
但是,您可以将在线定义为在最后五分钟内处于活动状态。这样您就可以像这样实现这个函数:
public function isOnline(): bool
{
return $this->last_activity->gt(Carbon\Carbon::now()->subMinutes(5));
}还要确保将last_activity标记为日期:
protected $dates = ['last_activity'];随着应用程序的增加,我会考虑另一种解决方案,而不是将数据库中的所有用户加载到内存中。
发布于 2019-07-22 10:48:01
我想你所说的“在线”是指使用网站并与之互动。您必须确定一个时间间隔,在这个时间间隔内,用户可以被视为“联机”或“脱机”而不再交互。也许..。十分钟?将“最后一次活动”字段与当前时间进行比较,以查看它们是否活动。用于exmaple Carbon::now()以获取当前时间并进行比较。
https://stackoverflow.com/questions/57144174
复制相似问题