You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spatie ActivityLog的活动日志表中添加document_Id字段?

在Spatie ActivityLog中新增document_id字段的可行方案

完全可以在Spatie ActivityLog的activity_log表中新增document_id字段,以下是具体实现步骤:

1. 数据库层面添加字段

首先需要给activity_log表新增document_id字段,通过创建迁移文件实现:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::table('activity_log', function (Blueprint $table) {
            // 根据实际需求调整字段类型,比如unsignedBigInteger、string等,nullable可选
            $table->unsignedBigInteger('document_id')->nullable();
            // 若需要关联其他表,可添加外键约束(可选)
            // $table->foreign('document_id')->references('id')->on('documents')->onDelete('set null');
        });
    }

    public function down()
    {
        Schema::table('activity_log', function (Blueprint $table) {
            // 若添加了外键,先删除外键再删字段
            // $table->dropForeign(['document_id']);
            $table->dropColumn('document_id');
        });
    }
};

执行迁移命令生效:

php artisan migrate

2. 模型层面配置可填充字段

你已经在ActivityLog模型的$fillable数组中添加了document_id,这一步是正确的,确保该字段支持批量赋值。

3. 自动记录日志时注入document_id

针对你的ReportHeader模型(已使用LogsActivity trait),可以重写tapActivity方法,在日志记录时自动传入document_id:

class ReportHeader extends ChangeConnection
{
    // 原有代码...

    use LogsActivity;

    // 重写方法注入document_id
    public function tapActivity(Activity $activity, string $eventName)
    {
        // 替换为实际的document_id来源,比如当前模型的关联字段或指定值
        $activity->document_id = $this->document_id;
    }
}

这样每次ReportHeader模型触发日志记录时,document_id会自动写入到activity_log表中。

4. 手动记录日志时指定document_id(可选)

如果需要手动记录日志,可直接在创建日志时赋值:

// 方式1:先记录日志再更新
activity()
    ->performedOn($reportHeader)
    ->causedBy(auth()->user())
    ->log('操作描述');
ActivityLog::where('id', activity()->last()->id)->update(['document_id' => $yourDocumentId]);

// 方式2:直接创建日志记录
ActivityLog::create([
    'log_name' => 'reportheader',
    'description' => '手动记录的操作',
    'subject_type' => ReportHeader::class,
    'subject_id' => $reportHeader->id,
    'document_id' => $yourDocumentId,
    'causer_id' => auth()->id(),
    'properties' => json_encode(['额外参数' => '值'])
]);

内容的提问来源于stack exchange,提问作者Menisha Myelwaganam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:25:16