60 lines
1.7 KiB
PHP
60 lines
1.7 KiB
PHP
<?php namespace App\Support;
|
|
|
|
use DB;
|
|
use Request;
|
|
|
|
trait LogRecord
|
|
{
|
|
// 注意,必须以 boot 开头
|
|
public static function bootLogRecord()
|
|
{
|
|
foreach(static::getModelEvents() as $event) {
|
|
static::$event(function ($model) use($event) {
|
|
$model->setRemind($model, $event);
|
|
});
|
|
}
|
|
}
|
|
|
|
public static function getModelEvents()
|
|
{
|
|
if (isset(static::$recordEvents)) {
|
|
return static::$recordEvents;
|
|
}
|
|
return ['created', 'updated', 'deleted'];
|
|
}
|
|
|
|
public function setRemind($model, $event)
|
|
{
|
|
$data = [
|
|
'node' => Request::module(),
|
|
'uri' => Request::module().'.'.Request::controller().'.'.Request::action(),
|
|
'table' => $model->getTable(),
|
|
'table_id' => (int)$model['id'],
|
|
'action' => $event,
|
|
];
|
|
|
|
if($event == 'created') {
|
|
$data['original'] = json_encode($model, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
|
|
if($event == 'updated') {
|
|
|
|
$original = $model->getOriginal();
|
|
$dirty = $model->getDirty();
|
|
|
|
// 软删除动作
|
|
if(isset($dirty['deleted_by'])) {
|
|
$data['action'] = 'trashed';
|
|
} else {
|
|
// 更新动作
|
|
$_original = [];
|
|
foreach ($dirty as $k => $v) {
|
|
$_original[$k] = $original[$k];
|
|
}
|
|
$data['original'] = json_encode($_original, JSON_UNESCAPED_UNICODE);
|
|
$data['dirty'] = json_encode($dirty, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
}
|
|
// DB::table('action_log')->insert($data);
|
|
}
|
|
} |