gpt4 book ai didi

database - 如何在用户离开时正确插入时间(user_left 和 user_joined 的值相同)

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:41 24 4
gpt4 key购买 nike

在这段代码中,我想获取用户加入和离开的时间,并将其存储到数据库中。如果我在“连接”表和“左”表中获得相同的值,会发生什么情况。如何修复它以便它存储不同的值?

 Schema::create('user_info', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('ip');
$table->string('joined');
$table->string('left');
});

在登录 Controller 中

public function logout() {
$left = now();
auth()->logout();
session()->forget('name');
session()->put('left', $left);
return redirect('/');
}

在模型中

protected $fillable = ['ip','name', 'joined'];
const CREATED_AT = 'joined';
const UPDATED_AT = 'left';

public static function storeUser() {
UserInfo::create([
'ip' => Request::ip(),
'name' => Auth::user()->name,
'joined' => now(),
]);
}

BroadcastServiceProvider.php

Broadcast::channel('chat', function ($user) {
$ip = Request::ip();
$time = now();
if (auth()->check() && !session()->has('name')) {
UserInfo::storeUser();
session()->put('name',$user->name);
return [
'id' => $user->id,
'ip' => $ip,
'name' => $user->name,
'joined' => $time,
];
}
});

这张图片说明了您将在下面看到的一些更改后的行为。它表明带有键“left”的数据目前不会发送给预期用户,而是发送给具有此名称的第一个用户。

This strange behaviour这个问题的跟进在这里How to override this code so that it insert data properly?

最佳答案

CREATED_ATUPDATED_AT 是 Eloquent 模型更改的时间戳,无论何时创建模型,它也会从非模型修改或更新 -现有到现有,所以这就是为什么你得到相同的值(value)

在注销函数中,更新用户的left

public function logout() {
$user_id = auth()->id(); // Get authenticated user ID
$user_info = App\UserInfo::find($user_id); // Get user info
$user_info->left = now(); // Change here
$user_info->save(); // Update here
auth()->logout();
session()->forget('name');
session()->put('left', $left);
return redirect('/');
}

根据您的表格,由于名称不唯一,无法区分用户及其信息

建立一个基于user_id的关系

用户模型

public function info()
{
return $this->hasOne(UserInfo::class);
}

UserInfo 模型

public function user()
{
return $this->belongsTo(User::class);
}

并且在user_infos迁移

Schema::create('user_infos', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('name');
$table->string('ip');
$table->dateTime('joined');
$table->dateTime('left');
});

清洁方法

public function logout() {
$info = auth()->user()->info; // Get user info
$info->left = now(); // Change here
$info->save(); // Update here
auth()->logout();
session()->forget('name');
session()->put('left', $left);
return redirect('/');
}

希望对你有帮助

关于database - 如何在用户离开时正确插入时间(user_left 和 user_joined 的值相同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58134538/

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