laravel 4 ですべての未処理の移行を実行したくありません。5 つの移行があります。ここで、1 つの移行を実行したいだけです。実行する代わりに: php artisan migrate のような特定の移行を実行したいと思います: php artisan migrate MY_MIGRATION_TO_RUN
20 に答える
移行をより多くのフォルダーに配置して、次のようなものを実行できます。
php artisan migrate --path=/app/database/migrations/my_migrations
Laravel 4 の移行を実行する際の不安を和らげるためのちょっとしたスニペットですphp artisan migrate --pretend
。これは、実際の移行を実行した場合に実行される SQL のみを出力します。
最初の 4 つの移行が既に実行されているようです。php artisan migrate
新しい最近の移行のみを実行すると思います。
アドバイス: すべての up() と down() が期待どおりに機能することを確認してください。私は、マイグレーションを実行するときに up()、down()、up() を実行して、それらをテストするのが好きです。down() と up() を 100% パーセント一致させなかったために、5 ~ 6 回の移行を行った後、それらを簡単にロールバックできないことに気付くのはひどいことです。
ちょうど私の2セント!--pretend
役立つことを願っています。
私は別の投稿でこの回答を提供しましたが、これを行うことができます: runartisan migrate
を実行してすべての移行を実行してから、次の SQL コマンドを実行して移行テーブルを更新し、移行が一度に 1 つずつ実行されたように見せます。
SET @a = 0;
UPDATE migrations SET batch = @a:=@a+1;
これにより、バッチ列が 1、2、3、4 などに変更されます。特定の移行のみに影響を与えたい場合WHERE batch>=...
は、そこに条件を追加します (および の初期値を更新します)。@a
この後、artisan migrate:rollback
必要なだけ移行することができ、一度に 1 つずつ移行を進めます。
最新の移行ファイルを実行する場合は、次のようにします。
php artisan migrate
次の方法で、移行を追加する前に戻すこともできます。
php artisan migrate: rollback
私が知っている簡単な方法が 1 つあります。これは、ローカル ホストでのみ利用できます。
- 必要に応じて移行ファイルを変更します
- phpMyAdminまたはデータベーステーブルを表示するために使用するものを開いてください
- 目的のテーブルを見つけてドロップします
- 移行テーブルを見つけて開きます
- 移行フィールドの下のこのテーブルで、目的のテーブル名を見つけてその行を削除します
- 最後に
php artisan migrate
、コマンド ラインまたはターミナルからコマンドを実行します。これは、データベースの移行テーブルに存在しないテーブルのみを移行します。
この方法は完全に安全であり、専門外の方法のように見えますが、エラーや問題は発生しませんが、それでも完全に機能します.
幸運を
私は同じ問題を抱えています。以下のように、最初の移行ファイルにテーブル作成コードをコピーします。
public function up()
{
Schema::create('posts', function(Blueprint $table){
$table->increments('id');
// Other columns...
$table->timestamps();
});
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
// Other columns...
$table->softDeletes()->nullable();
});
}
batch
また、テーブルの列番号を変更(減少)することもできmigrations
ます;)
そして実行しphp artisan migrate
ます。
これは私が使用する悪いアプローチです.移行したい特定のファイルを除いて他の移行ファイルを削除し、移行が完了したら PHP artisan migrate を実行します。ごみ箱に移動して、削除されたファイルを復元します。
(*) Windows の例: php artisan migrate --path=database\migrations\2021_05_18_121604_create_service_type_table.php
次のコマンドを入力できます。
php 職人の移行 --help
...
--path[=PATH] 実行する移行ファイルへのパス (複数の値が許可されます)
...
「--path」というオプションが表示されている場合(上の例のように)、Laravel のバージョンがこのパラメーターをサポートしていることを意味します。もしそうなら、運が良ければ、次のように入力できます。
php 職人移行 --path=/database/migrations/v1.0.0/
「 v.1.0.0 」は、特定のバージョンに対して実行する移行を保持する「/database/migrations」ディレクトリの下に存在するディレクトリです。
そうでない場合は、次のように、移行テーブルをチェックインして、どの移行が既に実行されているかを確認できます。
SELECT * FROM マイグレーション;
そして、「/database/migrations」フォルダから実行されたものを移動します。別のフォルダー「/databases/executed-migrations」を作成し、実行した移行をそこに移動します。
この後、次を実行できるはずです。
php 職人の移行
スキーマ/データベース内の既存のテーブルを上書きする危険はありません。
1 行目で return を使用したので、以前のデータベースはそのまま保持されます。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
return; // This Line
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 50);
$table->string('slug', 50)->unique();
$table->integer('role_id')->default(1);
$table->string('email', 50)->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('mobile', 10)->unique();
$table->timestamp('mobile_verified_at')->nullable();
$table->text('password');
$table->integer('can_login')->default(1);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
return;// This Line
Schema::dropIfExists('users');
}
}
とても簡単...!移行フォルダーに移動するだけです。すべての移行ファイルを別のフォルダーに移動します。次に、すべての移行を1つずつ移行フォルダーに戻し、そのうちの1つに対して移行を実行します(php artisan)。マスター マイグレーション フォルダに不良マイグレーション ファイルを挿入し、コマンド プロンプトで php artisan migrate を実行すると、エラーが発生します。