Difference between #4 and #13 of
How to automate timestamps in ActiveRecord models

Changes

Title changed

AHow to automate timestamps in ActiveRecord models

Category unchanged

Tutorials

Yii version unchanged

Tags unchanged

Content changed

<script type="text/javascript">
 
/*<![CDATA[*/
 
jQuery(document).ready(function() {
 
 
 
$('p').hide();
 
 
});
 
/*]]>*/
 
</script>
 
 
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.
[...]
array('title','length','max'=>255),
array('title, created, modified', 'required'),
array('modified','default',

 
                  
'value'=>new CDbExpression('NOW()'),
 
                  
'setOnEmpty'=>false,'on'=>'update'), array('created,modified','default',
 
                  
'value'=>new CDbExpression('NOW()'),
 
                  
'setOnEmpty'=>false,'on'=>'insert')
);
}
[...]
}

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")
 
26 0
34 followers
Viewed: 180 668 times
Version: 1.1
Category: Tutorials
Tags:
Written by: dalip
Last updated by: Yang He
Created on: Feb 14, 2009
Last updated: 12 years ago
Update Article

Revisions

View all history