Laravelフレームワークを使用して既存のデータベーステーブルに新しい列を追加する方法がわかりません。
私はを使用して移行ファイルを編集しようとしました...
<?php
public function up()
{
Schema::create('users', function ($table) {
$table->integer("paid");
});
}
ターミナルでは、php artisan migrate:install
とmigrate
を実行します。
新しい列を追加する方法
マイグレーションを作成するには、Artisan CLIでmigrate:makeコマンドを使用します。既存のモデルと衝突しないように特定の名前を使用してください
Laravel 3の場合:
php artisan migrate:make add_paid_to_users
Laravel 5+の場合:
php artisan make:migration add_paid_to_users
その後、Schema::table()
メソッドを使用する必要があります(新しいテーブルを作成するのではなく、既存のテーブルにアクセスしているため)。そして、あなたはこのような列を追加することができます:
public function up()
{
Schema::table('users', function($table) {
$table->integer('paid');
});
}
ロールバックオプションを追加することを忘れないでください。
public function down()
{
Schema::table('users', function($table) {
$table->dropColumn('paid');
});
}
その後、マイグレーションを実行できます。
php artisan migrate
これは両方ともLaravel 3のドキュメントでよくカバーされています。
そしてLaravel 4/Laravel 5の場合:
編集する
特定の列の後にこのフィールドを追加するには$table->integer('paid')->after('whichever_column');
を使用してください。
Laravel 5.1以降を使用している未来の読者のためにmike3875の答えに追加します。
作業を早くするために、フラグ "--table"を次のように使うことができます。
php artisan make:migration add_paid_to_users --table="users"
これはup
とdown
メソッドの内容を自動的に追加します。
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
//
});
}
同様に、新しいマイグレーションを作成するときに--create["table_name"]
オプションを使用すると、マイグレーションに定型句が追加されます。ちょっとしたことですが、それらをたくさんするときに役に立ちます。
Laravel 5を使用している場合、コマンドは次のようになります。
php artisan make:migration add_paid_to_users
ものを作るためのすべてのコマンド(コントローラー、モデル、マイグレーションなど)はmake:
コマンドの下に移動しました。
php artisan migrate
はまだ同じです。
次のように初期のSchema::create
メソッド内に新しい列を追加できます。
Schema::create('users', function($table) {
$table->integer("paied");
$table->string("title");
$table->text("description");
$table->timestamps();
});
すでにテーブルを作成している場合は、新しい移行を作成してSchema::table
メソッドを使用して、そのテーブルに列を追加できます。
Schema::table('users', function($table) {
$table->string("title");
$table->text("description");
$table->timestamps();
});
このコマンドを実行して、新しい移行を作成します。make:migration
例:
php artisan make:migration add_store_id_to_users_table --table=users
Database/migrationsフォルダに新しい移行ファイルがあります。
2018_08_08_093431_add_store_id_to_users_table.php(コメントを参照)
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddStoreIdToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
// 1. Create new column
// You probably want to make the new column nullable
$table->integer('store_id')->unsigned()->nullable()->after('password');
// 2. Create foreign key constraints
$table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
// 1. Drop foreign key constraints
$table->dropForeign(['store_id']);
// 2. Drop the column
$table->dropColumn('store_id');
});
}
}
その後、以下のコマンドを実行してください。
php artisan migrate
何らかの理由で最後の移行を元に戻したい場合は、次のコマンドを実行してください。
php artisan migrate:rollback
移行についての詳細は、 のドキュメント にあります。
テーブルに列を追加してから、端末に次のように入力して、既存の移行ファイルを変更するだけです。
$ php artisan migrate:refresh
これはlaravel 5.1に取り組んでいます。
まず、あなたの端末でこのコードを実行してください。
php artisan make:migration add_paid_to_users --table=users
その後、プロジェクトディレクトリに移動し、ディレクトリデータベースを展開します - ファイルadd_paid_to_users.phpを移行して編集し、このコードを追加します
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('paid'); //just add this line
});
}
その後端末に戻ってこのコマンドを実行してください。
php artisan migrate
これが助けになることを願っています。
前回の移行を最初にロールバックする
php artisan migrate:rollback
その後、既存の移行ファイルを変更(新規追加、列名の変更、または列の削除)してから、移行ファイルを再実行します。
php artisan migrate
他の人が述べたように、移行ファイルがベストプラクティスですが、ちょっとしたことで、いじくり回して列を追加することもできます。
$ php artisan tinker
これが端末用のワンライナーの例です。
Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })
(ここでは読みやすいようにフォーマットされています)
Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){
$table->integer('paid');
});