如何在家中显示所有连接的用户?
答案 0 :(得分:6)
这是一个非常基本的,但有望在Laravel5应用程序中检测Guest
和Registered
用户的有效方法。
第1步
打开文件config/session.php
并将驱动程序更改为数据库。
第2步
我们需要创建会话表,因此请使用以下artisan命令php artisan session:table
生成迁移文件。
第3步
在这个新生成的迁移中,您需要添加一个新的user_id
列,这样我们就可以将会话与用户联系起来(如果该用户当然已登录)。
打开文件migrations/xxxx_xx_xx_xxxxxx_create_session_table.php
并在Schema :: create:
$t->integer('user_id')->nullable();
以下是完整迁移的外观:
<?php
use Illuminate\Database\Migrations\Migration;
class CreateSessionTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sessions', function($t)
{
$t->string('id')->unique();
$t->text('payload');
$t->integer('last_activity');
$t->integer('user_id')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('sessions');
}
}
第4步
运行composer dump-autoload
和php artisan migrate
。
注意:如果您未在全球范围内安装Composer,请使用php composer.phar dump-autoload
。
第5步
将Eloquent Model保存在应用程序的某个位置Session.php
。
注意:建议保存位置在app目录中。
第6步
现在你只需要知道如何使用它。
。 。
<强>用法强>
将以下Session::updateCurrent();
放在代码的某处,因为这样可以确保更新当前用户的会话条目,只是一个示例,您可以将其放在您的应用/路由上。 php文件。
获取所有用户(访客+已注册)
$all = Session::all();
如果您需要在线检查所有用户一段时间,例如10分钟,则需要调用activity(:limit)
方法,如下所示:
$all = Session::activity(10)->get();
注意:此方法可以与guests()和/或registered()方法结合使用。
访客用户
抓住所有
$guests = Session::guests()->get();
Get the # of Guest users
$total = Session::guests()->count();
注册用户
抓住所有
$registered = Session::registered()->get();
foreach ($registered as $online) {
// You can retrieve the user information using something like:
var_dump($online->user->email);
}
获取注册用户数
$total = Session::registered()->count();
雄辩模型:
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Session;
use Illuminate\Database\Eloquent\Builder;
use Cartalyst\Sentinel\Laravel\Facades\Sentinel;
class Session extends Model
{
/**
* {@inheritdoc}
*/
public $table = 'sessions';
/**
* {@inheritdoc}
*/
public $timestamps = false;
/**
* Returns the user that belongs to this entry.
*
* @return \Cartalyst\Sentinel\Users\EloquentUser
*/
public function user()
{
return $this->belongsTo('Cartalyst\Sentinel\Users\EloquentUser');
}
/**
* Returns all the users within the given activity.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param int $limit
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActivity($query, $limit = 10)
{
$lastActivity = strtotime(Carbon::now()->subMinutes($limit));
return $query->where('last_activity', '>=', $lastActivity);
}
/**
* Returns all the guest users.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeGuests(Builder $query)
{
return $query->whereNull('user_id');
}
/**
* Returns all the registered users.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeRegistered(Builder $query)
{
return $query->whereNotNull('user_id')->with('user');
}
/**
* Updates the session of the current user.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeUpdateCurrent(Builder $query)
{
$user = Sentinel::check();
return $query->where('id', Session::getId())->update([
'user_id' => $user ? $user->id : null
]);
}
}
您也可以尝试this。