マイグレーションファイル機能
移行ファイルの主な機能は、データベースの構造を管理することです。実際、これは一連の SQL ステートメントを抽象化したものです。移行ファイルでは、テーブルの作成、テーブルの削除、フィールドの追加、フィールドの削除、および基本的にすべてのデータベースを実行できます。実際、これは SQL ステートメントを手動で記述するのと似ていますが、移行では SQL ステートメントを手動で記述する必要はなく、通常の構文に従って SQL ステートメントを呼び出すだけでよい点が異なります。
移行コマンドの概要
merge:breakpoint ブレークポイントの管理
merge:create 移行ファイルの作成
merge:rollback 最後の移行または特定の移行のロールバック
merge:run
データベースの :status 移行ステータスの表示
1. Thinkphp5.1 は移行を使用します
thinkphp5 は開発者に移行ソリューションの完全なセットを提供しますが、移行はデフォルトではインストールされないため、手動でインストールする必要があります。作業ディレクトリを tp5 プロジェクトに切り替えて、次を実行します。
composer require topthink/think-migration v3.0.2
デフォルトのインストール バージョン、その他のバージョンのアドレス: https://packagist.org/packages/topthink/think-migration
php thinkコマンドを実行して、インストールが成功したかどうかを確認します。
2.コマンドの作成
構文形式: php think merge:create TableName
TableName 形式: 最初の文字が大文字のキャメルケース。このコマンドは、移行ファイルを作成するために使用されます。たとえば、ここではビデオ移行ファイルを作成します。
php think migrate:create Video
プロジェクトのルート ディレクトリには追加のデータベース ディレクトリがあり、移行フォルダがあります。このフォルダは移行ファイルの保存に使用されます。このフォルダを開くと、作成したばかりのビデオの移行ファイルが表示されます。
created ./database/migrations/202305060932127_video.php
文件格式命名规则:时间 + 随机数 + _ + 文件名
ファイルが作成されたら、その内容を見てみましょう。
<?php
use think\migration\Migrator;
use think\migration\db\Column;
class Video extends Migrator
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change()
{
}
}
ここで、上で作成したビデオファイルにフィールドを追加する必要があります
ビデオテーブルの構造は次のとおりです
分野 | タイプ | 説明する |
ID | 整数 | 主キー |
ニックネーム | varchar(16) | ビデオ名 |
Eメール | varchar(32) | 郵便 |
パスワード | varchar64) | パスワード |
デフォルトのchangeメソッドを削除し、up()メソッドとdown()メソッドを作成します。runコマンド実行時にはup()メソッドが実行され、rollbackコマンド実行時にはdown()メソッドが実行されます。
<?php
use think\migration\Migrator;
use think\migration\db\Column;
class Video extends Migrator
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function up()
{
$table = $this->table('video');
$table->addColumn('name', 'string', ['limit' => 16, 'null' => false,'comment'=>'视频名称'])
->addColumn('email', 'string', ['limit' => 32, 'null' => false,'comment'=>'邮箱'])
->addColumn('password', 'string', ['limit' => 64, 'null' => false,'comment'=>'密码'])
->create();
}
public function down()
{
$this->dropTable('video');
}
}
このようにして、ビデオテーブルを作成できるマイグレーションファイルが作成されましたので、次は次のコマンドを学習しましょう。
3. 移行:コマンドを実行
移行ファイルが作成された後も、run コマンドを実行してデータベースを変更する必要があります。
この手順を実行する前に、config/database.php を正しく設定してください。ここのデータベースには接頭辞 eb_ が付いています。
php think migrate:run
実行が成功した後、データベースを確認すると、さらに 2 つのテーブル eb_migrations と eb_video が存在します。
以前に移行を定義し、ニックネーム、電子メール、パスワードの 3 つのフィールドだけを指定しましたが、run コマンドを実行して作成されたテーブルには 4 つのフィールドがあります。もっとID主キー? これはデフォルトで thinkphp5 によって追加されます。友達よ、注意してください!主キー フィールドの名前が id の場合、手動で指定する必要はありません。
4. 移行:ステータスコマンド
説明: 移行ステータスの表示
# php think migrate:status
Status Migration ID Started Finished Migration Name
----------------------------------------------------------------------------------
up 20230503032741 2023-05-06 17:12:50 2023-05-06 17:12:50 Video
5. 移行:ロールバック コマンド
説明: 最後の移行または特定の移行をロールバックします。
ロールバック操作を実行する
php think migrate:rollback
このとき、データベースとテーブルの構造を確認してください。データベースのテーブルは削除されており、存在しません。
6. 新しいテーブルフィールドを追加する
テーブルに対する二次的な操作の場合、同じスクリプト内でテーブルを 2 回編集することはできません。新しいスクリプトを作成することしかできません。
次に、テーブル eb_video に新しいフィールドを追加し、テーブル構造を再生成します。
php think migrate:create Video2
created ./database/migrations/202305060932127_video2.php
Video2 ファイルの内容
<?php
use think\migration\Migrator;
class Video2 extends Migrator
{
public function up()
{
$table = $this->table('video');
$table->addColumn('upload_time', 'string', ['limit' => 11, 'null' => false,'comment'=>'上传时间'])
->addColumn('user_id', 'string', ['limit' => 11, 'null' => false,'comment'=>'上传用户ID'])
->save();
}
}
データ移行
php think migrate:run