2016-04-28 15 views
1

私は完全に新しいLaravelの開発者です。私はVentureCraft Revisionableライブラリを使用してモデルリビジョンを記録しています。私は多対多モデルのリビジョンを記録する必要があります。リビジョンがこれをサポートしていないと私は理解しています。私は他の図書館を見てきましたが、どちらにも見えません。私はこれを行うことができる方法はありますか?私。モデルクラスがないピボットテーブルへの変更をログに記録しますか?多対多リレーションのLaravelログリビジョン

申し訳ありませんが広範な質問がありますが、私は立ち往生しており、実際にどこに行けばよいかわかりません。ヒントや参考になる書類があれば幸いです。

私はRevisionableライブラリを使用したいと思いますが、実際には変更されたピボットテーブル内のデータを使ってリビジョンテーブルにレコードを追加するだけで済みます。この。前もって感謝します。

答えて

5

現在、これを行うネイティブな方法はありませんが、いくつかのオプションがあります。私はModelBのは、MODELAにセーブ添付するために必要な特定のモデルに何をすべきか(または任意のシナリオ)クラスのグローバル関数を作った(またはhelpers.phpに使用)これを行うにされています。後で呼び出すだけ次に

/** 
* Creates a revision record. 
* 
* @param object $obj 
* @param string $key 
* @param mixed $old 
* @param mixed $new 
* 
* @return bool 
*/ 
public static function createRevisionRecord($obj, $key, $old = null, $new = null) 
{ 
    if (gettype($obj) != 'object') { 
     return false; 
    } 
    $revisions = [ 
     [ 
      'revisionable_type' => get_class($obj), 
      'revisionable_id' => $obj->getKey(), 
      'key' => $key, 
      'old_value' => $old, 
      'new_value' => $new, 
      'user_id' => vms_user('id'), 
      'created_at' => new \DateTime(), 
      'updated_at' => new \DateTime(), 
     ] 
    ]; 
    $revision = new \Venturecraft\Revisionable\Revision; 
    \DB::table($revision->getTable())->insert($revisions); 
    return true; 
} 

save()フックからMyHelperClass::createRevisionRecord()

public function save(array $options = []) 
{ 
    // $old = $this->getOriginal('key'); 
    // $new = $this->key; 
    // Let's say this is linked to \App\SomethingElse via 'something_id' 

    MyHelperClass::createRevisionRecord(\App\SomethingElse::find($this->something_id), 'custom_field', $old, $new); 

    // Do actual save. 
    return parent::save($options); 
} 

これは最もエレガントな方法ではありませんが、それは私の最初の仕事のハッキーオプションでした。

Revisionable v2.0 +には、作業中の組み込み機能が組み込まれています!

+0

ありがとう、@Austin。私は自分のハッキーなソリューションをコーディングすることになりましたが、私はあなたのことがもっと好きです。ありがとう! – brianfr82

関連する問題