nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

Symfony2で、created_at/updated_atを自動で使う方法

Symfony2で、Entityにcreated_at/updated_at(作成日時/更新日時)を自動で入れる方法

普通にやるとLifecycle Callbackを使うことになるのですが、こんなの毎回書くのは面倒なので、一発でどうにかしたいです。
Doctrine Extensions(DoctrineExtensionsBundle)を使います。

インストール


deps

[gedmo-doctrine-extensions]
    git=git://github.com/l3pp4rd/DoctrineExtensions.git

[DoctrineExtensionsBundle]
    git=git://github.com/stof/StofDoctrineExtensionsBundle.git
    target=/bundles/Stof/DoctrineExtensionsBundle
    version=1.0.0

で、

bin/vendors install

app/AppKernel.php

$bundles = array(
…
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
…
);

app/autoload.php

$loader->registerNamespaces(array(
    // ...
    'Stof'  => __DIR__.'/../vendor/bundles',
    'Gedmo' => __DIR__.'/../vendor/gedmo-doctrine-extensions/lib',
    // ...
));

使い方


app/config/config.yml

...
stof_doctrine_extensions:
    orm:
        default:
            timestampable: true
…

で、作成日時/更新日時を入れたいEntityの定義ファイルに

...
  fields:
...
     created_at:
         type: datetime
         gedmo:
           timestampable:
             on: create
     updated_at:
         type: datetime
         gedmo:
           timestampable:
             on: update

を追加して、あとはEntityを再生成してデータを投入

php app/console doctrine:generate:entities Nantoka
php app/console doctrine:schema:update --force

でOK

気になる点



  • createとupdateで秒がずれることがある

参考