Timestampable Behavior
The timestampable
behavior allows you to keep track of the date of creation and last update of your model objects.
Basic Usage
In the schema.xml
, use the <behavior>
tag to add the timestampable
behavior to a table:
<table name="book">
<column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
<column name="title" type="VARCHAR" required="true" primaryString="true" />
<behavior name="timestampable" />
</table>
Rebuild your model, insert the table creation sql again, and you're ready to go. The model now has two new columns, created_at
and updated_at
, that store a timestamp automatically updated on save:
<?php
$b = new Book();
$b->setTitle('War And Peace');
$b->save();
echo $b->getCreatedAt(); // 2009-10-02 18:14:23
echo $b->getUpdatedAt(); // 2009-10-02 18:14:23
$b->setTitle('Anna Karenina');
$b->save();
echo $b->getCreatedAt(); // 2009-10-02 18:14:23
echo $b->getUpdatedAt(); // 2009-10-02 18:14:25
The object query also has specific methods to retrieve recent objects and order them according to their update date:
<?php
$books = BookQuery::create()
->recentlyUpdated() // adds a minimum value for the update date
->lastUpdatedFirst() // orders the results by descending update date
->find();
You can use any of the following methods in the object query:
<?php
// limits the query to recent objects
ModelCriteria recentlyCreated($nbDays = 7)
ModelCriteria recentlyUpdated($nbDays = 7)
// orders the results
ModelCriteria lastCreatedFirst() // order by creation date desc
ModelCriteria firstCreatedFirst() // order by creation date asc
ModelCriteria lastUpdatedFirst() // order by update date desc
ModelCriteria firstUpdatedFirst() // order by update date asc
Tip
You may need to keep the update date unchanged after an update on the object, for instance when you only update a calculated row. In this case, call thekeepUpdateDateUnchanged()
method on the object before saving it.
Parameters
You can change the name of the columns added by the behavior by setting the create_column
and update_column
parameters:
<table name="book">
<column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
<column name="title" type="VARCHAR" required="true" primaryString="true" />
<column name="my_create_date" type="TIMESTAMP" />
<column name="my_update_date" type="TIMESTAMP" />
<behavior name="timestampable">
<parameter name="create_column" value="my_create_date" />
<parameter name="update_column" value="my_update_date" />
</behavior>
</table>
<?php
$b = new Book();
$b->setTitle('War And Peace');
$b->save();
echo $b->getMyCreateDate(); // 2009-10-02 18:14:23
echo $b->getMyUpdateDate(); // 2009-10-02 18:14:23
$b->setTitle('Anna Karenina');
$b->save();
echo $b->getMyCreateDate(); // 2009-10-02 18:14:23
echo $b->getMyUpdateDate(); // 2009-10-02 18:14:25
If you only want to keep track of the date of creation of your model objects set the disable_updated_at
parameter to true:
<table name="book">
<column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
<column name="title" type="VARCHAR" required="true" primaryString="true" />
<behavior name="timestampable">
<parameter name="disable_updated_at" value="true" />
</behavior>
</table>
<?php
$b = new Book();
$b->setTitle('War And Peace');
$b->save();
echo method_exists($b, 'getCreatedAt'); // true
echo method_exists($b, 'getUpdatedAt'); // false
echo $b->getCreatedAt(); // 2009-10-02 18:14:23
Found a typo ? Something is wrong in this documentation ? Just fork and edit it !