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回りのメモ予定