Symfony
doctrine
Symfony4

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

前置き

  • インストールや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

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

ドキュメント