詳細は、マイクロチャネル公衆番号に注意してください。
ThinkPHP5移行データベース移行ツール
マイグレーションとは何ですか?
Googleと移行移民を意味する翻訳は、我々が移行として、それを理解するPHPで、データベースで使用される移行は、データベースの移行戦略として理解することができます。前と後の移行と開発、我々はテーブルを作成するために、すべて手書きのSQL文は、手動でデータベースの実装に成功を作成する必要があり、多くの時間を過ごすために、プロジェクトデータベースの初期化光を作成します。
ローカルデータベースで使用されるすべての開発者が必要な場合も多人数チーム開発では、私たちは通常、それは、退屈な非常に複雑ではありません、すれ違うSQLにデータベースファイルをバックアップしているものであれば、テーブルへのデータベース・フィールド変更は、その後、我々は、彼らが地元の手動更新になるように、小さな開発する各パートナーに渡されたSQLステートメントを変更する必要があるので、あなたはそれ一度ことができますが、何回も起こりますか?私は、マイグレーションが少し生まれたように、この種のもので、開発チームは、わずか確かに頭痛だと思います。
移行は、いくつかのファイル管理データベース構造という、これらのファイルは、データベースのコマンドライン構造により変更することができ、実際にSQLを抜粋したものですで、これらのファイルは、反復と反復のプロジェクトバージョンとして、プロジェクトに格納されています。
開発中の小さなパートナーは、データベーステーブルの構造を変更した場合、彼女は唯一の移行ファイルを生成する必要があるとバージョン管理システムにプッシュ、といった:Gitの、および他の小さなパートナーに通知し、他の小さなパートナーは唯一のプルする必要があり、その後、その上に移行コマンドの下のコマンドラインは、プロジェクトの開発をスピードアップするために、データベースの変更の伝統的なプロセスを簡素化します。
移行ファイルアクション
移行ファイルの主な役割は、データベースの構造を管理するために使用され、実際には、それは、とても基本的に、すべてのデータベース操作SQL文の抽象化のセットは、ファイルの移行は、フィールドを追加し、テーブルをドロップし、テーブルを作成し、フィールドを削除することができているとされ、実際には手動でSQL文を記述していますが、すべての権利であることを、それを呼び出すためにのみ、構文のその規則に従って、SQL文を記述手動で移行を必要としませんように。
コマンドを移行
migrate:breakpoint
ブレークポイントを管理しますmigrate:create
移行ファイルを作成します。migrate:rollback
最後に、ロールバック、または特定の移行migrate:run
データベースの移行migrate:status
移行ステータス
Thinkphp5.1使用の移行
thinkphp5は、開発者のための移行ソリューションのセットを提供していますが、デフォルトの移行ではインストールされていない、我々は手動でインストールする必要があります。実行中のTP5のプロジェクトに作業ディレクトリを変更します。
composer require topthink/think-migration v2.0.3
TP6のデフォルトのバージョンがインストールされ、ここで指定されたインストールtp5.1バージョンV2.0.3で、複数のバージョンが対処:https://packagist.org/packages/topthink/think-migration
実行しphp think
、インストールが成功したかどうかを確認するためにコマンドを
私たちは、インストールが成功した、図から移行して子孫を見ることができます
コマンドを作成します
構文:php think migrate:create TableName
TableName
フォーマット:大文字の最初の文字こぶの法則。このコマンドは、そのような私たちが作成する場所として、移行ファイルを作成するために使用されるVideo
移行ファイルを:
php think migrate:create Video
まず、パフォーマンスMigratonそれはここに友達になることができ、すべての統一はいを情報の一部を促すメッセージが表示されます。次のように正常に作成:
# php think migrate:create Video
PHP Warning: Module 'redis' already loaded in Unknown on line 0
Create migrations directory? [y]/n (yes/no) [yes]:
> yes
created ./database/migrations/20190804032741_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()
{
}
}
ここで私は、フィールドを高めるために上記で作成した私のビデオファイルを提供する必要があります
Video
以下のテーブル構造
フィールド | タイプ | 説明 |
---|---|---|
ID | int型 | 主キー |
ニックネーム | VARCHAR(16) | 動画の名前 |
Eメール | VARCHAR(32) | ポスト |
パスワード | varchar64) | パスワード |
組み込みのデフォルトの削除
change
方法を作成するup()
方法やdown()
方法を。up()
実行方法はrun
、実行するコマンドdown()
実行中rollback
のコマンドの実行を。
up()
ここに方法は次のとおりです。
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();
}
down()
ここに方法は次のとおりです。
public function down()
{
$this->dropTable('video');
}
ファイルの内容全体
<?php
use think\migration\Migrator;
use think\migration\db\Column;
class Video extends Migrator
{
// migrate:run 时执行
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();
}
// migrate:rollback 时执行
public function down()
{
$this->dropTable('video');
}
}
このように、あなたは、テーブルの上のビデオファイルの移行が作成され、次のコマンドを学ぶための次のステップを作成することができます。
移行:コマンドを実行します。
移行ファイルが作成され、あなたが実行する必要がある run
コマンドは、データベースを変更することができます。
正しく設定この手順を実行する前に注意してください
config/database.php
。ここでは、データベースの接頭辞がありますiot_
。
php think migrate:run
正常に実行された後、以上の2つのテーブルをデータベースを表示iot_migrations
し、iot_video
iot_video
以下のテーブル構造
mysql> desc iot_video;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(16) | NO | | NULL | |
| email | varchar(32) | NO | | NULL | |
| password | varchar(64) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.07 sec)
私は唯一の指定された移行を定義する前に
nickname
、password
三つのフィールドが、実行run
tableコマンドがより多くの4つの分野、作成するために、id
主キーを?これがされてthinkphp5
私たちのデフォルトに追加します!それにジュニアパートナー注目!あなたの主キーフィールドが呼び出された場合は、id
手動で指定する必要はありません。
iot_video
デザインテーブル構造ビューのコメント
iot_migrations
目次は何ですか?
mysql> select * from iot_migrations G;
+----------------+----------------+---------------------+---------------------+------------+
| version | migration_name | start_time | end_time | breakpoint |
+----------------+----------------+---------------------+---------------------+------------+
| 20190804032741 | Video | 2019-08-04 11:49:49 | 2019-08-04 11:49:50 | 0 |
+----------------+----------------+---------------------+---------------------+------------+
1 row in set (0.08 sec)
ちょうど、実行が成功した後に名付けられたレコードを実行し、ファイル名とバージョン20,190,804,032,741が一から一であることがわかります
移行:statusコマンド
説明:移行ステータスを表示します
# php think migrate:status
Status Migration ID Started Finished Migration Name
----------------------------------------------------------------------------------
up 20190804032741 2019-08-04 11:49:49 2019-08-04 11:49:50 Video
の移行の実装を示すリストの形式
移行:roolbackコマンド
説明:ロールバックの最後または特定の移行
構文:php think migrate:rollback
# php think migrate:rollback --help
Help:
The migrate:rollback command reverts the last migration, or optionally up to a specific version
php console migrate:rollback
php console migrate:rollback -t 20111018185412 //指定版本
php console migrate:rollback -d 20111018
php console migrate:rollback -v
ロールバック操作
# php think migrate:rollback
PHP Warning: Module 'redis' already loaded in Unknown on line 0
== 20190804032741 Video: reverting
== 20190804032741 Video: reverted 0.1992s
All Done. Took 0.6151s
この時間は、削除されたデータベーステーブルの構造とデータベーステーブルを表示、それは存在しません。
mysql> desc iot_video;
1146 - Table 'iot.tinywan.com.iot_video' doesn't exist
mysql> select * from iot_migrations;
Empty set
表中のIot_migrationsのデータが削除さと一緒に、存在しません。
新規フィールド
テーブルの上に二次的操作は二度同じスクリプトで、あなただけの新しいスクリプトを作成することができ、編集することはできません。
次の表をiot_video
テーブル構造を再生成するために、新しいフィールドを追加
Video
以下の表は、フィールドを増やします
フィールド | タイプ | 説明 |
---|---|---|
upload_time | int型(11) | 更新 |
ユーザーID | int型(11) | ユーザIDをアップロード |
新しいスクリプトを作成します。
# php think migrate:create Video2
created ./database/migrations/20190804082737_video2.php
ビデオ2ファイルの内容
<?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
== 20190804082737 Video2: migrating
== 20190804082737 Video2: migrated 0.3345s
All Done. Took 0.7070s
ビューのテーブル構造
mysql> desc iot_video;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(16) | NO | | NULL | |
| email | varchar(32) | NO | | NULL | |
| password | varchar(64) | NO | | NULL | |
| upload_time | varchar(11) | NO | | NULL | |
| user_id | varchar(11) | NO | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
6 rows in set (0.08 sec)
付録
メソッドテーブル
メソッド名 | 説明 |
---|---|
SETID(文字列$ ID) | 主キーのフィールド名を設定します。 |
setPrimaryKey(文字列$キー) | 主キーを設定します |
setEngine(文字列$エンジン) | ストレージエンジンを設定し、そこにある:InnoDBは、MyISAMテーブル |
setComment(文字列$コメント) | テーブルのメモを設定します |
addTimestamps($ createAtName文字列、文字列\(updateAtName)|テーブルプラスを作成するための時間や編集時二つのフィールドは、デフォルトのフィールド名は次のとおりです。CREATE_TIME、UPDATE_TIME | | AddColumn関数(\) COLUMNNAME、タイプの$、\(オプション)|へテーブルのフィールドを追加| | changeColumn(\) COLUMNNAME、$ニュータイプ、\(オプション)|フィールド変更テーブルの属性| |作成する()| |テーブルを保存| |()保存|テーブルを作成|名前変更(\) newTableName) | テーブル名の名前を変更します |
hasTable($ tableNameの)| ()が存在します | テーブルがあるかどうかを確認 |
setIndexes(配列$ indexs) | バッチセットのインデックス |
ドロップ() | 現在のテーブルを削除します |
setForeignKeys(配列\(のForeignKey)|设置外键| | removeColumn(\) COLUMNNAME) | フィールドを削除します |
renameColumn($ OLDNAME、$ NEWNAME) | フィールドの名前を変更します |
(配列$データ)を挿入 | データの挿入 |
列タイプ
タイプ |
---|
biginteger |
binary |
boolean |
date |
datetime |
decimal |
float |
integer |
string |
text |
time |
timestamp |
uuid |
オプションのパラメータ
パラメータ | 説明 |
---|---|
limit |
長さの制限、整数 |
length |
limit 整数 |
default |
混合既定値、 |
null |
空、ブール値かどうか |
after |
どのフィールドの後 |
comment |
注記 |
ここでは、decimal型のためです。
パラメータ | 説明 |
---|---|
precision |
長さは、整数 |
scale |
長小数、整数 |
signed |
符号なし、ブール値かどうか |
以下は、列挙型とセット型に対して次のとおりです。
パラメータ | 説明 |
---|---|
values |
デフォルト値 |