Doctrine_AuditLog provides a full versioning solution. Lets say we have a NewsItem class that we want to be versioned. This means that everytime a NewsItem object is updated its version number is increased.
Doctrine_AuditLog provides a full versioning solution. Lets say we have a NewsItem class that we want to be versioned. This functionality can be applied by simply adding $this->actAs('Versionable') into your record setup.
+++ Creating a versioned record
<code type='php'>
<code type='php'>
class NewsItem extends Doctrine_Record
class NewsItem extends Doctrine_Record
{
{
...
@@ -53,16 +51,26 @@ class NewsItem extends Doctrine_Record
...
@@ -53,16 +51,26 @@ class NewsItem extends Doctrine_Record
Now when we have defined this record to be versionable, Doctrine does internally the following things:
* It creates a class called NewsItemVersion on-the-fly, the table this record is pointing at is news_item_version
* Everytime a NewsItem object is deleted / updated the previous version is stored into news_item_version
* Everytime a NewsItem object is updated its version number is increased.
+++ Using versioning
+++ Using versioning
<code type='php'>
<code type='php'>
$newsItem = new NewsItem();
$newsItem = new NewsItem();
$newsItem->title = 'No news is good news';
$newsItem->title = 'No news is good news';
...
@@ -71,11 +79,14 @@ $newsItem->content = 'All quiet on the western front';
...
@@ -71,11 +79,14 @@ $newsItem->content = 'All quiet on the western front';
$newsItem->save();
$newsItem->save();
$newsItem->version; // 1
$newsItem->version; // 1
$newsItem->title = 'A different title';
$newsItem->title = 'A different title';
$newsItem->save();
$newsItem->save();
$newsItem->version; // 2
$newsItem->version; // 2
</code>
</code>
+++ Reverting changes
Doctrine_Record provides a method called revert() which can be used for reverting to specified version. Internally Doctrine queries the version table and fetches the data for given version. If the given version is not found a Doctrine_Record_Exception is being thrown.
<code type='php'>
<code type='php'>
$newsItem->revert(1);
$newsItem->revert(1);
...
@@ -83,6 +94,30 @@ $newsItem->revert(1);
...
@@ -83,6 +94,30 @@ $newsItem->revert(1);
$newsItem->title; // No news is good news
$newsItem->title; // No news is good news
</code>
</code>
+++ Advanced usage
There are many options for the versioning plugin. Sometimes you may want to use other version column than 'version'. This can be achieved by giving the options parameter to actAs() method.