migration後にカラムを追加したい時

カラム追加の場合は、table nameを指定してmake:migration
php artisan make:migration add_is_admin_column_to_posts_table –table=”posts”

dropも忘れずに書く
unsignedはnot negative number

public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
            $table->integer('is_admin')->unsigned();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
            $table->dropColumn('is_admin');
        });
    }

mysql> describe posts;
+————+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| content | text | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| is_admin | int(10) unsigned | NO | | NULL | |
+————+——————+——+—–+———+—————-+
6 rows in set (0.01 sec)

public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            //
            $table->tinyInteger('is_admin')->default('0');
        });
    }

migrate:resetはall rollback
$ php artisan migrate:reset
Rolled back: 2019_12_05_083227_add_is_admin_column_to_posts_table
Rolled back: 2019_12_05_072639_create_posts_table
Rolled back: 2014_10_12_100000_create_password_resets_table
Rolled back: 2014_10_12_000000_create_users_table

migrate:refreshはresetとmigrateを同時に行う
$ php artisan migrate:refresh

ステータス表示
$ php artisan migrate:status
+——+——————————————————+
| Ran? | Migration |
+——+——————————————————+
| Y | 2014_10_12_000000_create_users_table |
| Y | 2014_10_12_100000_create_password_resets_table |
| Y | 2019_12_05_072639_create_posts_table |
| Y | 2019_12_05_083227_add_is_admin_column_to_posts_table |
+——+——————————————————+

カラムの編集・追加の度にmigration fileを追加するのか、resetで対応するかはどうなんだろう?
resetの方が、tableごとに管理できるので管理しやすそうだが、migration fileを追加していくのは、時系列で追えるメリットがある。

migration

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }

mysql> describe posts;
+————+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| body | text | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+————+——————+——+—–+———+—————-+
5 rows in set (0.00 sec)

rollback
$ php composer.phar dump-autoload
$ php artisan migrate:rollback

mysql> show tables;
+————————+
| Tables_in_laravel_test |
+————————+
| migrations |
| password_resets |
| users |
+————————+
3 rows in set (0.00 sec)

ロールバックというと、deployのロールバックを思い浮かべますが、tableに対しても、rollback(drop)できるのですね。

migration fileの修正・アップデート

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

カラムを追加して、もう一度migrateしたい時

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }

一度migrateした後、修正してphp artisan migrateとしてもnothing to doとなる
$ php artisan migrate
Nothing to migrate.

そのような場合は、
$ php artisan migrate:reset
$ php artisan migrate