📅  最后修改于: 2023-12-03 15:10:49.726000             🧑  作者: Mango
在Laravel中,添加活动方法可以实现对用户操作的记录和追踪,方便后续的数据分析和处理。本文将介绍如何根据路由在Laravel中添加活动类。
首先,在app目录下创建一个Activity模型:
php artisan make:model Activity -m
生成的Activity.php模型文件中应该包含类似下面的内容:
class Activity extends Model
{
protected $guarded = [];
}
运行下面的命令生成一个活动表迁移文件:
php artisan make:migration create_activities_table --create=activities
得到的迁移文件应该类似如下代码:
public function up()
{
Schema::create('activities', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('subject_id');
$table->string('subject_type', 50);
$table->string('description', 250);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('activities');
}
更新Activity模型文件以声明$fillable属性:
protected $fillable = [
'user_id', 'subject_id', 'subject_type', 'description'
];
然后在Activity类中添加一个静态方法record(),用于创建并保存新的Activity实例:
public static function record($description)
{
if (auth()->check()) {
auth()->user()->activities()->create([
'user_id' => auth()->id(),
'description' => $description,
'subject_id' => $this->id, // 当且仅当$subject实例存在时才会设置此属性
'subject_type' => get_class($this),
]);
}
}
在web.php路由文件中添加一个活动记录路由:
Route::post('activities/{subject}', 'ActivityController@store');
在app/Http/Controllers目录下新建一个ActivityController控制器:
class ActivityController extends Controller
{
public function store($subject)
{
$subject->record('created');
}
}
为了复用Activity模型的代码,将其相关逻辑封装到一个特性文件(ActivitySubject.php)中:
trait ActivitySubject
{
public function activities()
{
return $this->morphMany('App\Activity', 'subject');
}
public function recordActivity($description)
{
$this->activities()->create([
'user_id' => $this->user_id,
'description' => $description,
]);
}
}
然后在其他需要活动记录的模型中引入此特性,如下:
class Thread extends Model
{
use ActivitySubject;
}
在本文中,我们介绍了如何在Laravel中添加活动类,主要包括创建活动模型、新建活动表迁移文件、修改Activity模型、添加路由、添加控制器、为模型添加 Traits等步骤。通过这些简单的步骤,我们可以轻松地实现对用户操作的记录和追踪,方便后续的数据分析和处理。