前回、phinxをインストールしたところまでを説明しましたので、
今回は実際に使用してDBを更新してみたいと思います。
マイグレーションファイルを作成したり、実行する場合は下記のディレクトリで行います。
cd {dataのパス}/vendor/bin
まずはマイグレーションファイルを作成してみましょう!
ファイル名は見た感じわかりやすい方がいいですね。
今回はメンバーに誕生日カラムを追加してみましょう!
php phinx create AddDtbMember
下記のようなものが表示されればOKです。
Phinx by CakePHP – https://phinx.org. version 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
– {dataパス}/data/db/migrations
using seed paths
– {dataパス}/data/db/seeds
using migration base class Phinx\Migration\AbstractMigration
using default template
created {dataパス}/db/migrations/20231030045812_add_dtb_member.php
{dataパス}/db/migrationsディレクトリにファイルができているはずです。
change()メソッドが生成されているので、下記のソースを追加しましょう。
$this->execute(“alter table dtb_member add birth datetime null comment ‘誕生日’;”);
changeメソッド以外にも色々メソッドはあるので、こちらを参考に使い分けてもらってもいいと思います!
https://book.cakephp.org/3/ja/phinx/migrations.html
マイグレーションの実行をしてみましょう!
php phinx migrate -e development
マイグレーションが実行されていれば下記の表示がされます!
Phinx by CakePHP – https://phinx.org. version 0.10.8
using config file ./phinx.yml
using config parser yaml
using migration paths
– {dataパス}/db/migrations
using seed paths
– {dataパス}/db/seeds
using environment development
using adapter mysql
using database eccube2_db== 20231030045812 AddDtbMember: migrating
== 20231030045812 AddDtbMember: migrated 0.2129sAll Done. Took 0.2522s
ちなみに、、、
下記のコマンドで実行前のSQLの確認もできますが、初回実行前に試したらphinxlogができておらずエラーになってしまいました。。。
php phinx migrate -e development –dry-run
PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘{DB名}.phinxlog’ doesn’t exist in {dataのパス}/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php:194
phinxlogはマイグレーションファイルを管理しているテーブルになります。
CREATE TABLE `phinxlog` (
`version` bigint(20) NOT NULL,
`migration_name` varchar(100) DEFAULT NULL,
`start_time` timestamp NULL DEFAULT NULL,
`end_time` timestamp NULL DEFAULT NULL,
`breakpoint` tinyint(1) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
ちなみに今回実行したマイグレーションの情報はこんな感じで保存されていました。
version,migration_name,start_time,end_time,breakpoint
20231030045812,AddDtbMember,2023-10-30 14:25:13,2023-10-30 14:25:14,0
実際に私が担当した案件でphinxを導入したら格段にマイグレーションの管理がしやすくなりました!!
ぜひ2系を触る場合は初期構築時に導入することをお勧めします!!