10分ぐらいで学べるSymfony2 〜Doctrineテーブル作成編〜

データベースにテーブルを作成するまでとメタデータ回りのメモ

mysqlに今回の接続に使用するアカウントとパスワードとデータベースを作成

$ mysql -u root -p
create database symfony20
GRANT ALL PRIVILEGES ON symfony20.* TO symfony20@localhost IDENTIFIED BY 'hoge' WITH GRANT OPTION;
FLUSH PRIVILEGES;


データベースへの接続設定をSymfony2の設定ファイルに記載

$ vi app/config/parameters.ini

[parameters]
    database_driver   = pdo_mysql   # myslを使うならこのまま
    database_host     = localhost   # 接続先ホスト
    database_port     =             # 接続先ポート
    database_name     = symfony20   # データベース名
    database_user     = symfony20   # 接続ユーザ
    database_password = hoge        # 接続パスワード

(1)メタデータを作成
データベースの定義をメタデータに作成&記述

$ vi src/Test/HelloBundle/Resources/config/doctrine/Product.orm.yml

Test\HelloBundle\Entity\Product:
  type: entity
  table: null
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
    name:
      type: string
      length: '255'
  lifecycleCallbacks: {  }

(2)エンティティクラスの作成
src/Test/HelloBundle/Entity/の下にデータベースアクセスするためのモデルが生成される

$ php app/console doctrine:generate:entities TestHelloBundle
Generating entities for bundle "TestHelloBundle"
  > generating Test\HelloBundle\Entity\Product
$ vi src/Test/HelloBundle/Entity/Product.php          # エンティティファイルが作成される
<?php

namespace Test\HelloBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Test\HelloBundle\Entity\Product
 */
class Product
{}

(3)テーブル作成
メタデータからMYSQLにテーブルを作成する

$ php app/console doctrine:schema:create    # 作成時のみ
又は
$ php app/console doctrine:schema:update --force


メタデータは他の方法やフォーマットで作成可能

# コマンドからのメタデータの自動生成
# src/Test/HelloBundle/Entity/Product.php
# src/Test/HelloBundle/Resources/config/doctrine/Product.orm.yml
# のファイルを生成
$ php app/console doctrine:generate:entity --entity=TestHelloBundle:Product --fields="name:string(255) price:float description:text" --format=yml


# データベースの定義からメタデータの生成
$ php app/console doctrine:mapping:import TestHelloBundle yml
Importing mapping information from "default" entity manager
  > writing /var/www/Symfony/src/Test/HelloBundle/Resources/config/doctrine/Product.orm.yml


# --formatオプションを省略するとエンティティファイルのコメントにメタデータが記述される
# ORM〜がメタデータの記述
$ php app/console doctrine:generate:entity --entity=TestHelloBundle:Product --fields="name:string(255) price:float description:text"
$ vi src/Test/HelloBundle/Entity/Product.php
<?php

namespace Test\HelloBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Test\HelloBundle\Entity\Product
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Product
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer") 
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

次回もDoctrine回りのメモ予定