2016-04-28 18 views
1

Ich bin ein völlig neuer Laravel-Entwickler und verwende die VentureCraft-Revisionssoftware, um Modellrevisionen aufzuzeichnen. Ich muss Revisionen für ein Viele-zu-Viele-Modell aufzeichnen, und ich bin der Meinung, dass Revisable das nicht unterstützt. Ich habe mir andere Bibliotheken angeschaut und sie scheinen es auch nicht zu tun. Gibt es eine Möglichkeit, dass ich das tun kann? I.e. Änderungen an Pivot-Tabellen protokollieren, für die es keine Modellklassen gibt?Laravel-Logrevisionen für Viele-zu-Viele-Beziehungen

Sorry für die breite Frage, aber ich bin stecken und weiß nicht wirklich wohin damit. Irgendwelche Hinweise oder hilfreiche Dokumentation würden sehr geschätzt werden.

Ich würde gerne die revisionierbare Bibliothek verwenden, aber wirklich muss ich nur einen Datensatz in die Revisions-Tabelle mit den Daten in den entsprechenden Pivot-Tabelle (n), die geändert haben, und ich habe keine Ahnung, wie man vorgeht Dies. Danke im Voraus.

Antwort

5

Zwar gibt es keine native Möglichkeit, dies zu tun, gibt es ein paar Optionen. Was ich tue, für bestimmte Modelle, die ich brauchte Modell B das spart bis zu ModelA (oder was auch immer Szenario) wird eine globale Funktion in der Klasse (oder verwenden Sie in helpers.php) zu befestigen, dies zu tun:

/** 
* 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; 
} 

Dann rufen Sie einfach später MyHelperClass::createRevisionRecord() von meinem save() Haken.

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); 
} 

Es ist nicht die eleganteste Art, aber es war meine erste funktionierende Hacky-Option.

Das wird gesagt .. Es wird eingebaute Funktionalität dafür in Revisionable v2.0 +, an dem gearbeitet wird!

+0

Danke, @Austin. Ich habe am Ende meine eigene Hacky-Lösung programmiert, aber ich mag deine mehr. Vielen Dank! – brianfr82

Verwandte Themen