需先确认 activity_log 表已存在且有数据:执行 migrate:status 检查迁移状态,若未创建则运行 migrate;再用 Tinker 调用 Activity::count() 验证是否有记录。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

想快速查清某条数据被谁在什么时候改过哪些字段,而不是翻几十页日志大海捞针,就得用对 Laravel 的活动日志追踪机制。
确认 activity_log 表已存在且有数据
先执行 php artisan migrate:status,检查 create_activity_log_table 迁移是否显示 yes;如果状态是 no,说明表还没建,必须先运行 php artisan migrate。
接着用 Tinker 快速验证:运行 php artisan tinker → 输入 AppModelsActivity::count(),返回数字大于 0 才说明已有记录写入。
用 Spatie Activitylog 查询团队修改记录
方法一:按模型和操作类型筛选
在控制器或 Tinker 中执行:$logs = Activity::forSubject($user)->where('event', 'updated')->latest()->take(10)->get();,其中 $user 是你关心的模型实例(如 User::find(123)),这能精准拉出该用户最近 10 次更新动作。
方法二:查指定管理员的所有修改
Activity::causedBy($adminUser)->where('event', 'updated')->with('subject')->latest()->paginate(15),注意 $adminUser 必须是真实 User 实例,不能传 ID 数字,否则 causedBy 会静默失败。
方法三:手动构造时间+字段组合查询
比如查「昨天下午三点到五点之间,所有对 Order 模型 email 字段的修改」:Activity::where('created_at', '>=', now()->subHours(14)->format('Y-m-d H:i:s'))→where('created_at', 'subHours(12)->format('Y-m-d H:i:s'))→where('subject_type', 'App\Models\Order')→where('properties->old->email', '!=', null)→get()。这里 properties->old->email 能直接穿透 JSON 字段,但前提是日志里真存了 old 值——得确认模型中设置了 logOnlyDirty() 或明确启用了旧值记录。
在 Blade 模板中安全展示修改详情
在视图文件里遍历 $activities 集合时,用 {{ $activity->description }} 显示动作描述(如“用户被 updated”),用 {{ $activity->causer?->name ?? '系统' }} 渲染操作人姓名。
要展示具体改了什么字段,必须解包 properties:写成 @if($activity->properties['old'] ?? false) 原值:{{ json_encode($activity->properties['old']) }} @endif,但【不要直接 echo $activity->properties】,它可能含敏感字段(如 password_hash),不加判断就输出会引发安全风险。
最后加一行过滤:只显示 event 为 created、updated、deleted 的记录,跳过 login 或 export 这类非模型变更日志,避免干扰核心审计流。


















