Fixtureを記述し始めるのが面倒なのでテンプレートを出力するタスクを作った

symfonyにはRuby on Rails由来のfixturesというサンプルデータを登録する仕組みがあります。

The Definitive Guide to Symfony 16章

→「Fixture File Syntax」を参照

Practical Symfony Day 3 : The Data Model

→「The Initial Data」を参照

例えば、次のようなlogin_dataテーブルがあるとします。


schema-logindata


このlogin_dataテーブルに対して、以下のようにYAML形式でレコードを定義します。

LoginData:
  samplelogin1:
    name:        testuser1
    email:       test1@example.com
  samplelogin2:
    name:        testuser2
    email:       test2@example.com

このようにfixtureファイルを用意しておくと、symfonyコマンド「symfony propel:data-load」コマンドを使用してfixtureファイルに記述したデータをデータベースに簡単にロードすることができます。

これは非常に便利な仕組みなのですが、フィールドの多いテーブルの場合、最初にフィールド名などをずらずらと記述しなくてはいけないのが若干手間です。

ですので、フィールド名部分までをテンプレートとして出力する簡単なタスクを作成してみました。
(記述したコードはほんの数行です・・w)

簡単にタスクとして作成したので、まずは「fixture-template」というタスクをプロジェクトに追加します。

$ symfony generate:task fixture-template

コマンドを実行すると、lib/taskディレクトリに「fixturetemplateTask.class.php」というファイルが生成されます。
生成されたタスクの中身を、上記ソースに置き換えてください。


タスクの使用方法は、次のようにモデル名をパラメータで指定します。

$ symfony fixture-template LoginData

以下のようにモデルのすべてのフィールドを使ったfixtureのテンプレートが出力されます。

LoginData:
  LoginData_data:
    id:
    created_at:
    updated_at:
    name:
    email:

これをコピーして、必要に応じてフィールドを削除などして、fixtureを作成するという流れです。


# このような機能が、実はフレームワーク/ライブラリに既にある、という気がしなくもないですが・・・。


★テーブルの図は、こちらで紹介されていたgraphvizを使ってみました。これいいですね!