【发布时间】:2017-03-16 08:15:54
【问题描述】:
使用Laravel 5.4
我有一个 Job 模型,它上面有一个具有不同状态的枚举字段。这些状态在许多不同的地方发生变化。我制作了一个 JobHistory 模型和迁移来跟踪这些变化。
在我的工作模型上,我定义了新的 laravel 5.4 跟踪 eloquent 事件的方式:
/**
* The events that should be fired for eloquent actions
*
* @var array
*/
protected $events = [
'updating' => JobChangedStatus::class
];
状态变化是这样完成的:
/**
* Change the job status
*
* @param $status
*/
public function changeStatus($status)
{
$this->update([
'status' => $status,
]);
}
EventServiceProvider:
'App\Events\Jobs\JobChangedStatus' => [
'App\Listeners\Jobs\CreateJobHistory',
],
CreateJobHistory 监听器:
$job = $event->job;
$jobHistory = new JobHistory();
$jobHistory->old_status = $job->getOriginal('status');
$jobHistory->new_status = $job->status;
$jobHistory->job()->associate($job);
$jobHistory->executor()->associate(Auth::user());
$jobHistory->save();
当我将工作状态从 New 更改为 In_progress
我的 JobHistory 表如下所示:
所以 new_status 和 old_status 都给出旧值。我尝试使用$job->getDirty(),但是当我打印它时,它只会返回一个空数组。
我做错了什么?
【问题讨论】:
-
做了一个快速测试。我使用 $events 道具将事件映射到 Event 类,就像你做的那样。但是使用laravel.com/docs/5.4/events#event-subscribers 模式来设置监听器。无论如何,它对我有用——我可以访问原始属性值和当前属性值。会不会是你的听众在排队?
-
除了我的回答,您可能还想查看this package 处理数据历史
标签: php laravel eloquent laravel-5.4