我正在开发Laravel 5应用程序。我希望在用户创建或更新项目时将信息记录到数据库表中。
我创建了新的迁移文件 - 日志。在Logs表中,我想存储信息:USER更改或添加了哪些内容,哪些TABLE已更改,OLD VALUE和NEW VALUE。
在我看来,最简单的方法是创建新的存储库方法,并以某种方式使用新的日志方法连接存储和更新方法。
这就是我的存储库的样子:
private function log()
{
// place for log method
}
public function store($request)
{
Radar::create([
'date' => $request->input('date'),
'number' => $request->input('number'),
'distance' => $request->input('distance'),
'time' => $request->input('time'),
'speed' => $request->input('distance') / $request->input('time') * 3.6,
'user_id' => auth()->id()
]);
}
public function update($request, $radar)
{
$radar->date = $request->input('date');
$radar->number = $request->input('number');
$radar->distance = $request->input('distance');
$radar->time = $request->input('time');
$radar->speed = $request->input('distance') / $request->input('time') * 3.6;
$radar->user_id = auth()->id();
$radar->save();
$this->log($radar);
}
我想要简单的可重用解决方案,而无需编写太多代码。
答案 0 :(得分:1)
您可以使用event listeners或observers进行此操作,或使用revisionable
等软件包你可以听到雄辩的事件
Event::listen('eloquent.created: *', function($model) {
// log stuff
});
您可以在EventServiceProvider
中定义它或者,如果您要记录的是一个或几个型号:
class Radar extends Model
{
protected static function boot()
{
parent::boot();
static::created(function($radar) {
// log stuff
});
static::updated(function($radar) {
// log stuff
});
// will be triggered on both created and updatd
// static::saved(function($radar) {
// log stuff
// });
}
}
使用可修订包,您可以简单地包含特征并定义要跟踪的字段。
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
use Sofa\Revisionable\Laravel\Revisionable; // trait
class User extends Model
{
use Revisionable;
/*
* Set revisionable whitelist - only changes to any
* of these fields will be tracked during updates.
*/
protected $revisionable = [
'email',
'name',
];