![](https://i-blog.csdnimg.cn/blog_migrate/1dda6033971ccabb574b4fdee8f7a12f.png)
Laravel使用Observer(观察者)实现日志管理模块主要介绍了使用Observer对一个模块增删改的监听并记录日志的操作。
本篇是由于前文中的仓库库存模块运营人员经常会通过导入Excel表来进行批量操作,提高效率。由于下面一些原因无法通过Observer很好的监听:
- 日志监听需要记录操作人员,但开启队列后似乎无法通过Auth来获取到用户ID。
- 通过导入Excel来增加或者减少对应记录数量时我们用的是increment和decrement,而Observer只能监听到模型直接的create、update、save、delete等操作。
所以我们在导入的数据处理逻辑里面直接记录日志,这种是比较直接的方法,也欢迎其他小伙伴提出更好的解决方案。
//写在前面,主要是下面的方法,然后再处理增加和减少的方法里面分别调用,新增方法同理。
//$item表示循环Excel中的每行数据,$original表示数据自增/自减之前的数据。
//记录更新日志
public function logUpdate($item, $original)
{
$dirty = $this->warehouseInventory->where('warehouse_id', $item->get('warehouse_id'))
->where('seller_sku', $item->get('seller_sku'))
->where('box', $item->get('box'))
->first();
//获取修改后的数量,和修改前比较,如果不同则记录日志
foreach (Arr::only($dirty->toArray(), ['quantity']) as $key => $value) {
if ($value != Arr::get($original->toArray(), $key)) {
$data = [
'module' => 'warehouse_inventory',
'user_id' => $this->user->id,
'type' => 'update',
'content' => [
'warehouse' => $item->get('warehouse'),
'seller_sku' => $original['seller_sku'],
'original_quantity' => $original['quantity'],
'current_quantity' => $dirty['quantity'],
'box' => $dirty['box']
]
];
//行为日志入库
$this->actionLog->create($data);
}
}
}