LoginSignup
47
49

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-10

前置き

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

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

ドキュメント

47
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
49