blogチュートリアル(3) スキーマの定義とテーブルの生成

スキーマの定義

symfonyでは、データベースのスキーマをsymfony内の設定ファイル(schema.yml)に記述し、この設定から、データベース内にテーブルを生成します。 config/doctrine/schema.ymlファイルをエディタで開き、以下のように編集してください。

Post:
  actAs:
    Timestampable:
  columns:
    id:
      primary: true
      unsigned: true
      type: integer
      autoincrement: true
    title:
      type: string(50)
    body:
      type: string

CakePHPの場合はテーブル名に複数形(ブログチュートリアルでは「posts」)を使用するのに対し、symfonyでは単数形を使用することに注意してください。 また、スキーマの定義では、モデル名にはキャメルケース、カラム名には小文字とアンダースコアを使って命名することに注意が必要です。 上記ではモデル名が「Post」、カラム名が「id」「title」「body」です。

テーブルの生成

定義したスキーマに基づいてデータベースにテーブルを生成しましょう。コマンドラインでプロジェクトディレクトリ(sf_sandbox)へ移動し、以下のコマンドを実行します。

php symfony doctrine:build --all

確認プロンプトが表示されますので、「y」を入力してコマンドの実行を継続します。 メッセージの最後に以下のような行があれば、テーブルの生成が完了しています。

>> doctrine  created tables successfully

phpMyAdminで、postテーブルが生成されているかどうか確認してみてください。

fixtureを使ったテストデータの投入

このチュートリアルで使用するテストデータもここで投入しておきましょう。 symfonyにはRuby on Rails由来のfixture機能があり、YAML形式で記述したテストデータを簡単にデータベースに投入できます。 data/fixtures/fixtures.ymlファイルを開き、次のように編集してください。

Post:
  post1:
    title: タ<b>イ</b>トル
    body:  これは、<br />記事の本文です。

  post2:
    title: またタイトル
    body:  そこに本文が続きます。

  post3:
    title: タイトルの逆襲
    body:  こりゃ本当に面白そう!うそ。

ファイルの文字コードはUTF-8で保存してください。

ファイルを保存したら、プロジェクトのルートディレクトリで以下のコマンドを実行してください。

php symfony doctrine:data-load

このコマンドを実行すると、fixtureファイルに定義したデータがデータベースに投入されます。 phpMyAdminでpostテーブルにレコードが追加されているかどうか確認してください。

CakePHPの場合、先にCREATE TABLE文などにより手作業で直接データベースにテーブルを作成し、この情報をCakePHPが読み取って動作します。 symfonyの場合は、schema.ymlの設定を元に動作し、データベースのテーブルもスキーマファイルから生成されますので、CakePHPとは順序が逆になります。 ただし、データベースの既存のテーブル情報からschema.ymlを生成することも可能です。 『The symfony Reference Book タスク』を参照してください。