「Php/phpmig」の版間の差分
(→マイグレーション実行) |
(→特定のマイグレーションidだけ、upする場合) |
||
(同じ利用者による、間の31版が非表示) | |||
行6: | 行6: | ||
参考:https://qiita.com/hideiwa1/items/98f74d95806f8d43cef9 | 参考:https://qiita.com/hideiwa1/items/98f74d95806f8d43cef9 | ||
+ | |||
+ | 参考:https://labor.ewigleere.net/2020/01/24/phpmig-phpmyadmin-migrate/ | ||
===composer.jsonから作成の場合=== | ===composer.jsonから作成の場合=== | ||
composer.json | composer.json | ||
行17: | 行19: | ||
</pre> | </pre> | ||
$ composer update | $ composer update | ||
+ | |||
==phpmig初期設定== | ==phpmig初期設定== | ||
<pre> | <pre> | ||
− | vendor/bin/phpmig init | + | % vendor/bin/phpmig init |
+ | +d ./migrations Place your migration files in here | ||
+ | +f ./phpmig.php Create services in here | ||
</pre> | </pre> | ||
+ | |||
+ | migrationsディレクトリと、phpmig.phpファイルができる。 | ||
+ | |||
+ | phpmig.php | ||
+ | <pre> | ||
+ | <?php | ||
+ | |||
+ | use \Phpmig\Adapter; | ||
+ | |||
+ | $container = new ArrayObject(); | ||
+ | |||
+ | // replace this with a better Phpmig\Adapter\AdapterInterface | ||
+ | $container['phpmig.adapter'] = new Adapter\File\Flat(__DIR__ . DIRECTORY_SEPARATOR . 'migrations/.migrations.log'); | ||
+ | |||
+ | $container['phpmig.migrations_path'] = __DIR__ . DIRECTORY_SEPARATOR . 'migrations'; | ||
+ | |||
+ | // You can also provide an array of migration files | ||
+ | // $container['phpmig.migrations'] = array_merge( | ||
+ | // glob('migrations_1/*.php'), | ||
+ | // glob('migrations_2/*.php') | ||
+ | // ); | ||
+ | |||
+ | return $container; | ||
+ | </pre> | ||
+ | |||
+ | 中身を以下参考ページを見ながら、接続できるように修正。 | ||
+ | |||
+ | 参考:https://qiita.com/hideiwa1/items/98f74d95806f8d43cef9 | ||
==db設定== | ==db設定== | ||
config/database/の下にファイルを作成 | config/database/の下にファイルを作成 | ||
+ | |||
+ | ==中身の書き方== | ||
+ | 公式:https://github.com/davedevelopment/phpmig | ||
==マイグレーション実行== | ==マイグレーション実行== | ||
− | % vendor/bin/phpmig generate | + | % vendor/bin/phpmig generate AddTest |
− | +f ./migrations/ | + | +f ./migrations/20241022021157_AddTest.php |
以下ファイルだけが、作成される(これ以外の更新はない) | 以下ファイルだけが、作成される(これ以外の更新はない) | ||
− | migrations/ | + | migrations/20241022021157_AddTest.php |
<pre> | <pre> | ||
use Phpmig\Migration\Migration; | use Phpmig\Migration\Migration; | ||
行55: | 行91: | ||
</pre> | </pre> | ||
− | == | + | 以下のように修正 |
− | + | <pre> | |
+ | class AddTest extends Migration | ||
+ | { | ||
+ | /** | ||
+ | * Do the migration | ||
+ | */ | ||
+ | public function up() | ||
+ | { | ||
+ | $sql =<<<EOF | ||
+ | CREATE TABLE tests( | ||
+ | `id` integer(15) NOT NULL AUTO_INCREMENT, | ||
+ | `name` varchar(255) NOT NULL, | ||
+ | `is_delete` boolean NOT NULL DEFAULT false, | ||
+ | `created_at` datetime DEFAULT CURRENT_TIMESTAMP(), | ||
+ | `updated_at` datetime DEFAULT CURRENT_TIMESTAMP(), | ||
+ | PRIMARY KEY (`id`) | ||
+ | ); | ||
+ | EOF; | ||
+ | $container = $this -> getContainer(); | ||
+ | $container['db']->query($sql); | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Undo the migration | ||
+ | */ | ||
+ | public function down() | ||
+ | { | ||
+ | $sql =<<<EOF | ||
+ | DROP TABLE tests | ||
+ | EOF; | ||
+ | $container = $this->getContainer(); | ||
+ | $container['db']->query($sql); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | ==マイグレーション実行方法== | ||
+ | <pre> | ||
+ | $ vendor/bin/phpmig migrate | ||
+ | m == 20241022021157 AddTest migrating | ||
+ | == 20241022021157 AddTest migrated 0.0282s | ||
+ | </pre> | ||
+ | migration内のファイルが全て実行され、 | ||
+ | testsテーブルが作成される。 | ||
+ | |||
+ | ==マイグレーション順序== | ||
+ | ファイルのところにある数字順になる。なので、数字の桁が間違ってると順番が変わる。 | ||
+ | |||
+ | ==ステータス確認== | ||
+ | どこまで反映されてるか確認できる。 | ||
+ | <pre> | ||
+ | $ vendor/bin/phpmig status | ||
+ | |||
+ | Status Migration ID Migration Name | ||
+ | ----------------------------------------- | ||
+ | up 20241022021157 AddTest | ||
+ | down 20241022023036 AddTest2 | ||
+ | </pre> | ||
+ | upが反映されていて、downが反映されてない。 | ||
+ | |||
+ | ==マイグレーションid指定する場合== | ||
+ | <pre> | ||
+ | vendor/bin/phpmig migrate -t 20241022023036 | ||
+ | </pre> | ||
+ | 20241022023036のマイグレーションidが、最終反映された状態まで構築される | ||
+ | |||
+ | <pre> | ||
+ | % vendor/bin/phpmig status | ||
+ | Status Migration ID Migration Name | ||
+ | ----------------------------------------- | ||
+ | up 20241022021157 AddTest | ||
+ | up 20241022023036 AddTest2 | ||
+ | down 20241022024629 AddTest3 | ||
+ | </pre> | ||
+ | |||
+ | ==マイグレーションのロールバック== | ||
+ | <pre> | ||
+ | % vendor/bin/phpmig rollback | ||
+ | m == 20241022021157 AddTest reverting | ||
+ | == 20241022021157 AddTest reverted 0.0049s | ||
+ | </pre> | ||
+ | 一つ前のマイグレーションidの | ||
+ | testsテーブルが削除される。 | ||
+ | |||
+ | ===マイグレーションidを指定してロールバックする場合=== | ||
+ | <pre> | ||
+ | vendor/bin/phpmig rollback -t 20241022021157 | ||
+ | </pre> | ||
+ | 20241022021157のマイグレーションidが、最終反映された状態にもどる | ||
+ | |||
+ | <pre> | ||
+ | % vendor/bin/phpmig status | ||
+ | m | ||
+ | Status Migration ID Migration Name | ||
+ | ----------------------------------------- | ||
+ | up 20241022021157 AddTest | ||
+ | up 20241022023036 AddTest2 | ||
+ | down 20241022024629 AddTest3 | ||
+ | </pre> | ||
+ | |||
+ | ==特定のマイグレーションidだけ、downする場合== | ||
+ | あまり使わないだろうが、特定のマイグレーションidだけ、downする場合。 | ||
+ | |||
+ | 全てをmigrateさせた後実行した結果↓ | ||
+ | <pre> | ||
+ | $ vendor/bin/phpmig down 20241022023036 | ||
+ | $ vendor/bin/phpmig status | ||
+ | m | ||
+ | Status Migration ID Migration Name | ||
+ | ----------------------------------------- | ||
+ | up 20241022021157 AddTest | ||
+ | down 20241022023036 AddTest2 | ||
+ | up 20241022024629 AddTest3 | ||
+ | </pre> | ||
+ | |||
+ | ==特定のマイグレーションidだけ、upする場合== | ||
+ | あまり使わないだろうが、特定のマイグレーションidだけ、upする場合。 | ||
+ | |||
+ | 全てをrollbackさせた後実行した結果↓ | ||
+ | <pre> | ||
+ | $ vendor/bin/phpmig up 20241022023036 | ||
+ | $ vendor/bin/phpmig status | ||
+ | Status Migration ID Migration Name | ||
+ | ----------------------------------------- | ||
+ | down 20241022021157 AddTest | ||
+ | up 20241022023036 AddTest2 | ||
+ | down 20241022024629 AddTest3 | ||
+ | </pre> |
2024年10月22日 (火) 02:50時点における最新版
目次
phpmigインストール(composer)
composer require davedevelopment/phpmig composer require pimple/pimple
参考:https://qiita.com/hideiwa1/items/98f74d95806f8d43cef9
参考:https://labor.ewigleere.net/2020/01/24/phpmig-phpmyadmin-migrate/
composer.jsonから作成の場合
composer.json
{ "require": { "davedevelopment/phpmig": "^1.7", "pimple/pimple": "^3.5" } }
$ composer update
phpmig初期設定
% vendor/bin/phpmig init +d ./migrations Place your migration files in here +f ./phpmig.php Create services in here
migrationsディレクトリと、phpmig.phpファイルができる。
phpmig.php
<?php use \Phpmig\Adapter; $container = new ArrayObject(); // replace this with a better Phpmig\Adapter\AdapterInterface $container['phpmig.adapter'] = new Adapter\File\Flat(__DIR__ . DIRECTORY_SEPARATOR . 'migrations/.migrations.log'); $container['phpmig.migrations_path'] = __DIR__ . DIRECTORY_SEPARATOR . 'migrations'; // You can also provide an array of migration files // $container['phpmig.migrations'] = array_merge( // glob('migrations_1/*.php'), // glob('migrations_2/*.php') // ); return $container;
中身を以下参考ページを見ながら、接続できるように修正。
参考:https://qiita.com/hideiwa1/items/98f74d95806f8d43cef9
db設定
config/database/の下にファイルを作成
中身の書き方
公式:https://github.com/davedevelopment/phpmig
マイグレーション実行
% vendor/bin/phpmig generate AddTest +f ./migrations/20241022021157_AddTest.php
以下ファイルだけが、作成される(これ以外の更新はない)
migrations/20241022021157_AddTest.php
use Phpmig\Migration\Migration; class AddTests extends Migration { /** * Do the migration */ public function up() { } /** * Undo the migration */ public function down() { } }
以下のように修正
class AddTest extends Migration { /** * Do the migration */ public function up() { $sql =<<<EOF CREATE TABLE tests( `id` integer(15) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `is_delete` boolean NOT NULL DEFAULT false, `created_at` datetime DEFAULT CURRENT_TIMESTAMP(), `updated_at` datetime DEFAULT CURRENT_TIMESTAMP(), PRIMARY KEY (`id`) ); EOF; $container = $this -> getContainer(); $container['db']->query($sql); } /** * Undo the migration */ public function down() { $sql =<<<EOF DROP TABLE tests EOF; $container = $this->getContainer(); $container['db']->query($sql); } }
マイグレーション実行方法
$ vendor/bin/phpmig migrate m == 20241022021157 AddTest migrating == 20241022021157 AddTest migrated 0.0282s
migration内のファイルが全て実行され、 testsテーブルが作成される。
マイグレーション順序
ファイルのところにある数字順になる。なので、数字の桁が間違ってると順番が変わる。
ステータス確認
どこまで反映されてるか確認できる。
$ vendor/bin/phpmig status Status Migration ID Migration Name ----------------------------------------- up 20241022021157 AddTest down 20241022023036 AddTest2
upが反映されていて、downが反映されてない。
マイグレーションid指定する場合
vendor/bin/phpmig migrate -t 20241022023036
20241022023036のマイグレーションidが、最終反映された状態まで構築される
% vendor/bin/phpmig status Status Migration ID Migration Name ----------------------------------------- up 20241022021157 AddTest up 20241022023036 AddTest2 down 20241022024629 AddTest3
マイグレーションのロールバック
% vendor/bin/phpmig rollback m == 20241022021157 AddTest reverting == 20241022021157 AddTest reverted 0.0049s
一つ前のマイグレーションidの testsテーブルが削除される。
マイグレーションidを指定してロールバックする場合
vendor/bin/phpmig rollback -t 20241022021157
20241022021157のマイグレーションidが、最終反映された状態にもどる
% vendor/bin/phpmig status m Status Migration ID Migration Name ----------------------------------------- up 20241022021157 AddTest up 20241022023036 AddTest2 down 20241022024629 AddTest3
特定のマイグレーションidだけ、downする場合
あまり使わないだろうが、特定のマイグレーションidだけ、downする場合。
全てをmigrateさせた後実行した結果↓
$ vendor/bin/phpmig down 20241022023036 $ vendor/bin/phpmig status m Status Migration ID Migration Name ----------------------------------------- up 20241022021157 AddTest down 20241022023036 AddTest2 up 20241022024629 AddTest3
特定のマイグレーションidだけ、upする場合
あまり使わないだろうが、特定のマイグレーションidだけ、upする場合。
全てをrollbackさせた後実行した結果↓
$ vendor/bin/phpmig up 20241022023036 $ vendor/bin/phpmig status Status Migration ID Migration Name ----------------------------------------- down 20241022021157 AddTest up 20241022023036 AddTest2 down 20241022024629 AddTest3