composer require doctrine/dbal
Laravelのマイグレーションでカラムの名前と型を変更するには、
今既にあるマイグレーションファイルは 変更せずに置いておいて、変更を記述したマイグレーションファイルを新規に作成します。
テーブル名 | カラム名 | 型 |
---|---|---|
artists | year_birth_no | smallint |
↓ (例)こちらに変更するとします。
テーブル名 | カラム名 | 型 |
---|---|---|
artists | year_birth_no_name | string |
マイグレーションファイル名はなんでもいいです。
php artisan make:migration change_artists_table_column_year_birth_no --table=artists
成功すると 次のようなファイルが生成されます
2019_07_08_180737_change_artists_table_column_year_birth_no
以下のように変更用の命令と戻し用の命令を記述しておきます。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ChangeArtistsTableColumnYearBirthNo extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// カラム名を変更
Schema::table('artists', function (Blueprint $table) {
$table->renameColumn('year_birth_no', 'year_birth_no_name');
});
// 型を変更
Schema::table('artists', function (Blueprint $table) {
$table->string('year_birth_no_name')->default(NULL)->change();
});
// カラム「fax_name」を「string型」「nullを許可」に変更
$table->string('fax_name')->nullable()->change();
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// 型を戻す
Schema::table('artists', function (Blueprint $table) {
$table->smallInteger('year_birth_no_name')->change();
});
// カラム名を戻す
Schema::table('artists', function (Blueprint $table) {
$table->renameColumn('year_birth_no_name','year_birth_no');
});
// カラム「fax_name」を「string型」「nullを許可しない」に変更
$table->string('fax_name')->nullable(false)->change();
}
}
(注意)tinyIntegerでは実行できません。 ↓ を参照
composer require doctrine/dbal
php artisan migrate
php artisan migrate:rollback
composer require "doctrine/dbal:2.*"
Schema::table('applications', function (Blueprint $table) {
// nullを許可に変更
DB::statement('ALTER TABLE users MODIFY COLUMN is_active tinyint COMMENT \'フラグ\'');
});
vendor/laravel/framework/src/Illuminate/Foundation/Application.php を調べます
/**
* The Laravel framework version.
*
* @var string
*/
const VERSION = '5.0.31';
php artisan -V
{{ App::VERSION() }}
$laravel_ver = app()->version();
文字列で返ります
5.4.36
$laravel_ver = preg_replace("{([0-9]+)\.([0-9]+)\.([0-9]+)}","$1", app()->version() );
文字列で返ります
5.4.36
.env を 以下のように設定します。
APP_ENV=production
APP_ENV=production の設定がある時に、migrate コマンドを実行すると
$ artisan migrate:fresh --seed
次のような確認入力が表示されます。
これで本番環境で安易なマイグレーションの実行を抑止することができます。
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? (yes/no) [no]:
composer require doctrine/dbal
add_columns_articles_table は任意の命名でOKですが「作業内容_テーブル名_table」としておくとテーブル作成時のファイルと命名が揃います
php artisan make:migration add_columns_articles_table --table=articles
例:「articles」テーブルに以下のカラムを追加します
・「status_id」カラムの後ろにint型の「recruit_flg」を追加します
・「recruit_flg」カラムの後ろにint型の「recruit_date」を追加します
public function up()
{
Schema::table('articles', function (Blueprint $table) {
$table->integer('recruit_flg')->default(0)->after('status_id'); // この行を追加
$table->dateTime('recruit_date')->nullable()->after('recruit_flg'); // この行を追加
});
}
注意:SQLiteでは任意の位置にカラム追加が出来ないようです
回避策 : https://goo.gl/a2atCx
public function down()
{
Schema::table('articles', function (Blueprint $table) {
$table->dropColumn(['recruit_date','recruit_flg']);
});
}
php artisan migrate
php artisan migrate:rollback
以上で、既存のデータベースのデータを削除することなく、カラムを追加できます。