How to automate timestamps in ActiveRecord models

Comparing #8 with #13

Content

There are dozens ofmany ways to automate the setting of timestamps in yii ActiveRecord models. Two ways you can do this ahree are presented here: 1. Via rules() 2. Via beforeSave()  
3. Via CTimestampBehavior (zii)
To start off we need to create a database table.

[sql]
[...]
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
)
 ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
 
Following this we'll gener
;
 
 
After we have the table we need to cre
ate thea model with the Yii shell tool:
 
 
    model Node Nodes
 
 
To create the crud functionality we need to type this:
 
 
    crud Node
and CRUD for it by using Gii.
 
 
Check the guide on [How to generate model and CRUD with Gii](http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app#implementing-crud-operations "How to generate model and CRUD with Gii").


The first way you can do it is via your model's rules. Here is an example.
[...]
if ($this->isNewRecord)
$this->created = new CDbExpression('NOW()');
else $this->modified = new CDbExpression('NOW()'); return parent::beforeSave(); } These are simple and elegant solutions to this issue.Note that in the above code, when creating a new record only the 'created' field will be assigned/updated, while the 'modified' record will be assigned/updated only when updating an existing record.
 
 
If you want to assign/update the 'modified' field even when creating a new record... use this code:
 
 
[php]
 
public function beforeSave() {
 
if ($this->isNewRecord)
 
$this->created = new CDbExpression('NOW()');
 
 
$this->modified = new CDbExpression('NOW()');
 

 
return parent::beforeSave();
 
}
 
 
 
These are simple and elegant solutions to this issue.
 
 
The third possibility is to use CTimestampBehavior in your models. You can read about this in the API documentation:
 
[http://www.yiiframework.com/doc/api/1.1/CTimestampBehavior](http://www.yiiframework.com/doc/api/1.1/CTimestampBehavior "Yii API: CTimestampBehavior")