ECCUBE4

【EC-CUBE4】 マイグレーションの基本

こんにちはジャムです。

本記事ではマイグレーションについて解説します。

EC-CUBE4のマイグレーション機能を使うことで、データベースに書き込みたいデータを作成することができます。

マイグレーションを使う機会は主に、ローカル環境、テスト環境、本番環境などで値が変わらないデータの管理です。

例えば、商品のカテゴリーや追加したページの情報は各データベースで変わることは無いため、マイグレーションファイルに記述しておくことで、共有が可能です。

コマンドを1行打ち込むだけで、データベースに書き込みできるで便利です。

それでは、早速基本的な使い方を紹介します。

基本的な使い方フロー

マイグレーションの生成

$ php bin/console doctrine:migrations:generate
or
$ php bin/console d:m:g

Generated new migration class to "/プロジェクトファイル/app/DoctrineMigrations/Version20210505085837.php"

このコマンドで「Version20210505085837.php」というファイルが生成されます。ファイル名は日付(20210505)+ αで作成されます。

app/DoctrineMigrationsディレクトリ配下に作成されます。

データベースに書き込む内容を記載する

<?php declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20210505085837 extends AbstractMigration
{
    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs
+      $this->addSql("INSERT INTO `dtb_category`(`id`, `parent_category_id`, `creator_id`, `category_name`, `hierarchy`, `sort_no`, `create_date`, `update_date`, `discriminator_type`) VALUES (1, NULL, NULL, '追加カテゴリー', 1, 8, NOW(), NOW(), 'category');");

    }

    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs
+ $this->addSql("DELETE FROM `dtb_category` WHERE `category_name` = '追加カテゴリー';");
    }
}

この記載例では、upコマンドでdtb_categoryテーブルに、「追加カテゴリー」という名前のカテゴリーを追加します。

downコマンドで、upコマンドで追加した「追加カテゴリー」を削除します。

マイグレーションを実行する

$ php bin/console d:m:m
or 
$ php bin/console doctrine:migrations:migrate

こちらで、upメソッドを実行
$ php bin/console d:m:e 20210505085837 --up

マイグレーションを元に戻す

downメソッドを実行
$ php bin/console d:m:e 20210505085837 --down

状態確認

マイグレーションの状況を確認する。

$ php bin/console doctrine:migrations:status

履歴を一覧で確認する

$ php bin/console doctrine:migrations:status --show-versions