如何在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
相关产品推荐
相关产品推荐

