更新并显示控制器用户"touched"的列



我目前正在开发一个功能,不知道如何真正实现它。

当访问者使用模型/控制器时,他们应该能够将该值存储在数据库中。就像以多态的方式一样,他们应该能够访问参数。

例如,访问线程的用户将具有存储的值App\thread,用户将能够检索这些线程值"用户最后一次被看到访问线程xyz";。

我会考虑这个问题,但老实说,我不知道如何处理它,所以任何暗示实现这一目标的帮助都将是很棒的!感谢您提前提供的帮助!明天我将利用这些想法来实现这一目标。

实现这一点的一种方法是创建一个表来记录用户的所有访问,比如一个名为visits的表

//Migration schema for visits table
Schema::create('visits', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('visitable_id');
$table->string('visitable_type');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
}

然后您可以在访问和用户之间建立关系

class User extends Model
{
public function visits()
{
return $this->hasMany(Visit::class);
}

//... rest of the class code
}
class Visit extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}

public function visitable()
{
return $this->morphTo();
}
//... rest of the class code
}

class Thread extends Model
{
public function visits()
{
return $this->morphMany(Visit::class, 'visitable');
}
//... rest of the class code
}

然后,每次用户访问线程时,show控制器都可以在访问表中为登录用户创建一个条目。

public function show(Thread $thread)
{
$thread->visits()->create(['user_id' => auth()->id()]);
//... rest of the method code
}

最新更新