2017-06-09 15 views
0

私はLaravel 5アプリを開発しています。ユーザーがアイテムを作成または更新するたびにデータベーステーブルに情報を記録したいデータベース(mysql)テーブルに情報を記録するリポジトリメソッドを作成します。

新しい移行ファイル - ログを作成しました。ログテーブルでは、どのユーザーが何かを変更または追加し、どのテーブルが変更され、古い値と新しい値であるかという情報を保存します。

私の意見では、これを行う最も簡単な方法は、新しいリポジトリメソッドを作成し、何らかの方法で新しいログメソッドでストアメソッドと更新メソッドを接続することです。

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

あなたはあなたがEventServiceProvider


でこれを定義することができ雄弁イベント

Event::listen('eloquent.created: *', function($model) { 
    // log stuff 
}); 

を聞くことができ、このためにevent listenersまたはobserversを使用するか、revisionable

のようなパッケージを使用することができますまたは、ログに記録するモデルが1つまたは2つの場合:

あなたは、単純な形質を含め、追跡したいフィールドを定義することができますrevisionableパッケージに
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', 
    ]; 
+0

詳細情報の有益な回答ありがとうございます。乾杯! – Luke

関連する問題