2017-12-06 11 views
0

10人がlaravelで新しいプロジェクトを開始します。 たとえば2,3年後、多くの移行が行われます。場合Laravel多くの移行の問題

新しいプログラマがコードとデータベースとのチーム、彼は意志のセットアップ開発環境を結合します。

問題は、多くの移行がある場合、移行の千がある場合、それは遅すぎる実行されるということです。これを処理する方法

+2

は、マイグレーションの新鮮なバッチを生成するために、[マイグレーション・ジェネレータ(https://github.com/Xethron/migrations-generator)を使用します。これは私にとって本当に便利だと証明されています。注意すべき点がいくつかありますが、必要に応じてパッケージをフォークして変更するだけです。 – Ohgodwhy

答えて

1

はいたびに頭痛になるために起こっている移行の100Sを実行しています。データベーステーブルのスナップショットを作成し、それを最初の移行にしたいと思うでしょう。例えば

あなたはpostsusersテーブルでブログを持って言うことができます。各テーブルに対して、create tableステートメントが必要です。あなたはusersテーブルのためのあなたのcreate table文を取得するためのMySQLで作業している場合は、クエリを実行します:

SHOW CREATE TABLE users

を、あなたのテーブルのステートメントを作成したら、あなたはすべてのこれらのクエリおよびアーカイブを実行し、新たな移行を行うことができますあなたの古い移行。

class CreateSnapshotTables extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     // Create users table 
     DB::statement(" 
      CREATE TABLE `users` (
       `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
       `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL, 
       `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
       `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
       `remember_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
       `created_at` timestamp NULL DEFAULT NULL, 
       `updated_at` timestamp NULL DEFAULT NULL, 
       `deleted_at` timestamp NULL DEFAULT NULL, 
       PRIMARY KEY (`id`), 
       UNIQUE KEY `users_email_unique` (`email`) 
      ); 
     "); 

     // Create posts table 
     DB::statement(" 
      CREATE TABLE `posts` (
       `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
       `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 

       // ...etc. 

       PRIMARY KEY (`id`), 
       UNIQUE KEY `users_email_unique` (`email`) 
      ); 
     "); 
    } 
} 
+1

ありがとう、これは良い考えです。 それは動作します。 毎回手動で移行する必要があるという1つの制限があります。 いつかは多分自動すべての移行をスキャンデシベルの移行を作成し、1つの移行を生成する、またはそれぞれの新しい移行は、共通の移行が最後の一つで発生して存在します。 たとえば、列のユーザー名を作成してユーザーに変更すると、共通の移行では、列「ユーザー」の「マージされた」変更のみが行われます。 問題の1つは、列を削除するような不可逆的な移行にあります。 – user2693928