[Catalyst] Maintaining updated and created timestamps in database

Brandon Black blblack at gmail.com
Thu Mar 2 06:22:52 CET 2006


On 3/1/06, hkclark at gmail.com <hkclark at gmail.com> wrote:
> I know RoR will automatically maintain the dates of columns named
> "updated_on" and "created_on".  Can I do a similar thing with
> Catalyst?  My currently plan is to use  Catalyst::Model::CDBI.
>
> I took a look at the EasyCMS example app and I see that it has a
> "posted" column in a couple of tables.  I can't find any code inside
> EasyCMS itself that is doing the update (but I could be overlooking
> it), so I assume these are auto-updating (but I can't find any docs
> that provide details on that.
>
> Any suggestions?
>

The "created_on" part can be handled automagically at the database
level for most SQL implementations.  For instance, in PostgreSQL, you
would define the column as:

created_on TIMESTAMP NOT NULL DEFAULT current_timestamp

(assuming I didn't make a silly syntax error there).  You would still
be able to override that by explicitly setting it during a create or
an update, which might or might not be desirable.

You could also do both the created_on and the updated_on as triggers
at the database level.  The advantage of using triggers is that you
could enforce that created_on and updated_on always really reflect
just that, and not allow them to be arbitrarily set to other values by
your code (or by any other future code that might make a SQL
connection to your database).

I would try to handle it at the DB level along those kinds of lines if
it were me.

I don't know anything about doing it in Class::DBI, so I'll leave that
one alone.

To do it in DBIx::Class will require someone writing a new add-on
component module for it.  Having it always just happen for columns
with the magic names created_on and updated_on is probably a Bad Idea
in the general case, but one could make it so that the new component
(DBIx::Class::AutoTimestamps or some such thing) would take a new
setup-time call like __PACKAGE__->auto_timestamp_cols({ create =>
created_on, update => updated_on }); when the source class is set up.

Writing such a package is left as an exercise for the next guy to read this :)

-- Brandon



More information about the Catalyst mailing list