ThinkPHP5 データベース移行ツールの移行

マイグレーションファイル機能

移行ファイルの主な機能は、データベースの構造を管理することです。実際、これは一連の 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

おすすめ

転載: blog.csdn.net/qq_32450471/article/details/130530203