StofDoctrineExtensionsBundle について使ったり調べてみた

投稿者: | 2014/12/05

この記事は、Symfony Advent Calendar 2014 – Qiitaの7日目の記事です。

Symfony2で開発していると大抵の人がお世話になっている、StofDoctrineExtensionsBundleですが、Timestampable(作成日や更新日を自動挿入できる)以外にも便利な機能が提供されていたので、つかってみました。

StofDoctrineExtensionsBundle とは

簡単に言うと、O/RマッパーであるDocrtineを拡張したDoctrineExtensionsを簡単に使えるようにバンドル化したのが、StofDoctrineExtensionsBundleです。

作成日や更新日を自動で挿入してくれるTimestampableを使っている人も多いかと思いますが、ドキュメントを見ると色々な機能を提供していることがわかります。

DoctrineExtensions’s featuresを見ると、次のような機能があります。
一部(というかほとんど)よくわかっていない機能があります。

Tree

  • 木構造のような扱いをしてくれる。カテゴリなどに向いている

Translatable

  • ロケール(Locale)を設定することで他言語で挿入したデータを取得できる

Sluggable

  • スラッグ化(?)した文字列を取得できる
  • e.g. “the title”, “my code” => “the-title-my-code”

Timestampable

  • 作成日(CreatedAt)や更新日(UpdatedAt)を自動で挿入・変更してくれる
  • (おそらく)使用頻度No.1

Blameable

  • エンティティを新規作成、更新すると別のエンティティの要素を更新してくれる(?)
  • Timestampableと似ているが、文字列やオブジェクトなどを挿入してくれる

Loggable

  • エンティティに変更履歴を残すことができ、昔のバージョンに戻すこともできる

Sortable

  • エンティティのソートキーを更新してくれる
  • Todoリストみたいに順番(position)を管理したい場合に便利

Translator

  • Translatable とどう違うのかがよくわからない

Softdeleteable

  • $em->remove()したときに、削除日(deletedAt)に日付を入れることでソフトデリートしてくれる

Uploadable

  • ファイルのアップロードやリネーム、移動などをサポートしてくれる

Reference Integrity

  • MongoDB用にエンティティ間でデータの整合性を保つのをサポートしてくれる

実際に使ってみた

Timestampable, Softdeleteable, Sortableを使ってみたので使い方をざっと見ていきます。
リポジトリはこちら ⇒ ohsawa0515/simulist (develop branch)

ER図

こんな感じです。すごくシンプルです。
カラム名やテーブル名が複数形になったりならなかったりしていますが気にしないでください。

er_todolist

  • Projectテーブル ・・・ Todoリストを管理する
  • Listsテーブル ・・・ タスク

一応、SQLも載せておきます。

Composerでインストール

DoctrineExtensionsBundleをComposerでインストールします。
DataFixuresBundleも後で使うので、一緒にインストールします。

バンドルの設定

AppKernel.phpでバンドルを有効化させます。

app/config/config.ymlで使いたい機能を設定します。

エンティティの設定

すでに各エンティティクラスが自動生成している前提で、エンティティクラスにアノテーションで機能を有効化させます。

  • $createdAtは作成日、$updatedAtは更新日、$deletedAtは削除日(ソフトデリート)で設定しています

  • $createdAtは作成日、$updatedAtは更新日、$deletedAtは削除日(ソフトデリート)で設定しています
  • $positionはソートする際に、順番を入れます
  • $project@Gedmo\SortableGroupを設定することで、Project単位でListsのソートを設定してくれます

DataFixtureでデータを入れる

追加した機能が正しく動いているかはDataFixturesを使って確認します。

データをロードします。

データが格納されたか確認します。

created_at,updated_atに日付が挿入されているのが分かります。また、positionもデータ投入した順にインクリメントされているのが確認できます。

SoftDeleteableは以下のようなコードを実行することで確認できます。

実行すると、idが2のタスク(味噌)のdeleted_atに日付が入ります。

最後に

StofDoctrineExtensionsBundleを設定することで細かい制御をしなくても済むのでとても便利です。
他の機能を使う機会があればまたブログに書きたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*