前置き
- インストールやDB接続設定はSymfony4を想定
- DoctrineコマンドはSymfony4でなくても使用可能
- Symfony2では
bin/console
ではなくapp/console
Doctrineのインストール
$ composer require doctrine
DB接続設定
# この行を環境に合わせて修正する
DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name"
DBの作成
以下のコマンドを使うと .env
の接続設定で指定した db_name
のデータベースを作成する。
$ php bin/console doctrine:database:create
Doctrineコマンド一覧表示
$ php bin/console list doctrine
コマンドごとのヘルプを表示
$ php bin/console doctrine:database:create --help
Entityクラスを作成
例えば、以下のようにすると src/Entity/Product.php
が作成される。
$ php bin/console make:entity Product
src/Entity/Product.php
の中身はこのような感じ。
// 一部のみ記載
// ...
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
// add your own fields
}
Entityクラスからマイグレーションファイルを作成
src/Entity/Product.php
にプロパティを追加、それをベースにマイグレーションファイルを作成する。
まずは例として、 $name
プロパティを追加する。
// 一部のみ記載
// ...
class Product
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $name;
}
プロパティを追加したら以下のコマンドでマイグレーションファイルを作成する。
$ php bin/console doctrine:migrations:diff
コマンドが成功すると src/Migrations/
にマイグレーションファイルが作成される。
マイグレーションを実行する
$ php bin/console doctrine:migrations:migrate
これで product
テーブルがDBに作成される。
また、Entityクラスにプロパティを追加するたびに、diff
を叩いてマイグレーションファイルを作成し、 migrate
でマイグレーションを実行すれば、プロパティに対応したカラムを追加することができる。
なお、マイグレーション実行後は、DBに migration_versions
テーブルが作成される。
マイグレーション前の状態に戻す
$ php bin/console doctrine:migrations:execute 20171210142949 --down
バージョンは、後述する doctrine:migrations:status
でも確認可能。
マイグレーションの状態を確認する
$ php bin/console doctrine:migrations:status
適用済み・未適用のマイグレーションなどが確認できる。
マイグレーションがおかしくなったときの確認にも役立つ。
空のマイグレーションファイルを作成する
$ php bin/console doctrine:migrations:generate
Entityクラスから作成せずに、空のマイグレーションファイルを作成して、適用するテーブル操作を直接書き込むこともできる。
マイグレーションファイルには up
メソッドと down
メソッドが用意されており、この中にテーブル操作処理を記述することになる。
up
メソッドは doctrine:migrations:migrate
したときに実行され、 down
メソッドは doctrine:migrations:execute --down
したときに実行される。
マイグレーション実行をテストしてみる
--dry-run
オプションを付与することで、マイグレーションを実行すると適用されるSQLを確認できる。
マイグレーション自体は行われない。
$ php bin/console doctrine:migrations:migrate --dry-run
実行確認されないようにする
--no-interaction
オプションを付与すると、実行前に確認されることなくマイグレーションが始まる。
自動化する際に便利。
$ php bin/console doctrine:migrations:migrate --no-interaction
マイグレーションの履歴を削除する
$ php bin/console doctrine:migrations:version 20171210142949 --delete
マイグレーションがおかしくなってしまった場合などに試してみると良い。