创建存储库方法,即将信息记录到数据库(mysql)表。

时间:2017-06-09 08:36:01

标签: php mysql laravel-5.4

我正在开发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);
}

我想要简单的可重用解决方案,而无需编写太多代码。

1 个答案:

答案 0 :(得分:1)

您可以使用event listenersobservers进行此操作,或使用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',
    ];