Symfony2 und Doctrine2 - Historie der änderungen aufzeichnen
Ich brauche, um in der Datenbank der Geschichte der Veränderungen des Profils. Mit Ausnahme von Profil-Daten, die ich speichern muss, Zeitstempel und Benutzerkennung. Abfrage zur Erstellung einer neuen Historie-Datensatz ist einfach:
INSERT INTO history_profile
SELECT NULL, CURRENT_TIMESTAMP(), p.* FROM profile p WHERE p.profile_id=?
Wo setzen Sie diese Abfrage? Ich kann nicht mit löst. Ich habe mehrere Ideen:
-
controller in Aktion genannt, die auf " submit form
$em = $this->getEntityManager(); $conn = $em->getConnection(); if (!is_null($profile->getProfileId())) { $conn->executeQuery('INSERT INTO history_profile SELECT NULL, CURRENT_TIMESTAMP(), p.* FROM profile p WHERE p.profile_id=?', array($profile->getProfileId())); } $em->persist($profile); $em->flush();
aber diese Abfrage ausgeführt wird jeder Einreichen, auch wenn es keine updates zu Profilieren.
-
in Person, als Ereignis-listener, um preUpdate
class Profile { /** * @ORM\preUpdate * @ORM\prePersist */ public function onPrePersist() { } }
aber ich weiß nicht, wie man Lehre connection-Objekt
Bearbeiten - EntityAudit Studie
Diesem Set sieht vielversprechend aus, aber ich kann nicht konfigurieren. Ich installierte es richtig und wenn ich auf config.yml:
simple_things_entity_audit:
audited_entities:
- AldenXyzBundle\Entity\Profile
angeschaut und fragt nach
php ./app/console doctrine:schema:update --dump-sql
aber es war nur für SQL create table-Revisionen:
CREATE TABLE revisions (id INT AUTO_INCREMENT NOT NULL,
timestamp DATETIME NOT NULL, username VARCHAR(255) NOT NULL,
PRIMARY KEY(id)) ENGINE = InnoDB
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie EntityAudit bundle für die Versionierung Ihrer Entitäten.
doctrine:schema:update --force
Kasse der Verwendung - Bereich. EntityAudit automatisch erstellt revision beim speichern oder aktualisieren einer Entität zu db.doctrine:schema:update --force
nur erstellt, Tabellerevisions
und nichtprofile_audit
v0.1.0
tag.AldenXyzBundle
Sie gemeintAlden\XYZBundle
Todo
Abschnitt an der Unterseite der doc.Doctrine2 hat ein datetime-Feld geben. Haben Sie einen Blick auf die Lehrmeinung datetime-Beispiele. Aber wenn möglich, möchten Sie vielleicht zu prüfen, Vermietung der Datenbank-handle createdOn und/oder modifiedOn durch timestamp-Mechanismen oder Trigger. Auch die sql-sollte das nicht gehen in Ihre Entitäten. Wenn Sie brauchen, custom-sql, sollte es gehen in Ihre Benutzerdefinierte Entität Repositories.
Ich bin mir nicht sicher, ob Sie suchen, nur für "createdOn" timestamp oder "updatedOn" timestamp oder beides. Lehre Versionierung (Abschnitt 9.2.1) könnte gedacht werden und als "updatedOn" datetime-Feld.
Schließlich habe ich nicht verwendet dieses bundle. In der Steuerung nach dem POST-Formular mit Daten und Spülung EntityManager ich Hinzugefügt-Funktion, die kopieren den Eintrag direkt in der Datenbank (hinzufügen von Versionsinformationen auf dem Weg). Aber ich habe die Idee mit der anderen Tabelle für die überarbeitung der info aus dem bundle.