Posted at

【Symfony4】Doctrineマイグレーションコマンドまとめ

More than 1 year has passed since last update.


前置き


  • インストールやDB接続設定はSymfony4を想定

  • DoctrineコマンドはSymfony4でなくても使用可能

  • Symfony2では bin/console ではなく app/console


Doctrineのインストール

$ composer require doctrine


DB接続設定


.env

# この行を環境に合わせて修正する

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 の中身はこのような感じ。


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 プロパティを追加する。


src/Entity/Product.php

// 一部のみ記載

// ...

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

マイグレーションがおかしくなってしまった場合などに試してみると良い。


ドキュメント