2016-07-31 13 views
2

私のデータベース(mysql db)ですべての変更をログに記録しようとしています。私はどこに更新してからテーブルフィールドを知っている必要がありますので、いくつかの研究の後、私はgetDirty()方法に出くわしたが、それは常に空の配列を返すLaravel 5.2 getDirty常に空の配列

は、ここに私の簡単なコードの例です:

public function update($id, Request $request) 
    { 
     $article = Article::findOrFail($id); 
     $article->update($request->all()); 
     return $article->getDirty(); 
    } 

何も返されない理由は何ですか?

+0

ためsavingupdatingdeletingのような多くのイベントがあります...あなたはミサの割り当てのホワイトリストに登録する属性を持っていますか? = –

+0

@MinaAbadirはい '保護されたの$充填可能な[ \t 'タイトル'、 \tの体 '、 \t 'published_at'、 ];' –

+0

そしてタイトルや体やpublished_atの値が変わったのか?同じ値を指定すると、たとえフォームに提出されたとしても、それらが汚れているとマークされません。 –

答えて

3

データベースを更新した後に$article->getDirty();に電話するためです。あなたは、このためのモデルイベントを使用することができます

、詳細look here

class SomeModel extends Eloquent { 

    protected static function boot() 
    { 
    parent::boot(); // don't forget to call the parent boot method 
    //On saving 
    static::saving(
     function($record) 
     { 
     $dirty = $record->getDirty(); 
     foreach ($dirty as $field => $newdata) 
     { 
      $olddata = $record->getOriginal($field); 
      if ($olddata != $newdata) 
      { 
      // Do what it takes here :) 
      } 
     } 
     return true; 
     } 
    ); 
    } 
} 
+0

保存方法に他のパラメータを投稿するにはどうすればよいですか? (つまり、ユーザーIDやその他の情報、誰が何を変更するのかを記録することができます) –

+0

@Autista_zこの変更を行ったユーザーは 'Auth :: user()'を呼び出して取得でき、必要なその他の情報を照会できます。 – Maraboc

+0

ありがとう、知っている、私はAuth :: userを使うことができるが、cronジョブの場合はどうなるだろうか?ユーザーがログインしていないときに、ユーザーが計画した操作でデータが更新されている。 –