laravel MySQL tinyInteger型のカラムのコメントを変更

## 目的

- laravel TinyInteger型のカラムのコメントをマイグレーションファイルで書き換える方法をまとめる

## 環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン | 8.6.0 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |

## 情報

- 筆者はlaravel8にて本記事の内容の検証を実施した。未検証ながら他のバージョンでも本方法で実施する事が可能だと思う。
- 下記のマイグレーションファイルを実行してusersテーブルのremember_tokenにTinyInt型の「flag」カラムを追加する。

    ```アプリ名ディレクトリ/database/migrations/2020_12_28_124905_change_users_table.php
    <?php
      
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    class ChangeUsersTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::table('users', function (Blueprint $table) {
                $table->tinyInteger('flag')->after('remember_token')->comment('フラッグ用のカラム');
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::table('users', function (Blueprint $table) {
                $table->dropColmun('flag');
            });
        }
    }
    ```

- 上記のマイグレーションファイルをマイグレートした後のusersテーブルのカラム情報を下記に記載する。（下記情報はSQL文`show full columns from users;`で確認した。）

    | Field             | Type            | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment                     |
    | --- | --- | --- | --- | --- | --- | --- | --- | --- |
    | id                | bigint unsigned | NULL               | NO   | PRI | NULL    | auto_increment | select,insert,update,references |                             |
    | name              | varchar(255)    | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |                             |
    | email             | varchar(255)    | utf8mb4_unicode_ci | NO   | UNI | NULL    |                | select,insert,update,references |                             |
    | email_verified_at | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |                             |
    | password          | varchar(255)    | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |                             |
    | remember_token    | varchar(100)    | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |                             |
    | flag              | tinyint         | NULL               | NO   |     | NULL    |                | select,insert,update,references | フラッグ用のカラム          |
    | created_at        | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |                             |
    | updated_at        | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |                             |

## 概要

1. マイグレーションファイルの作成と記載
1. マイグレートと確認

## 詳細

1. マイグレーションファイルの作成と記載
    1. アプリ名ディレクトリで下記コマンドを実行してマイグレーションファイルを作成する。

        ```terminal
        $ php artisan make:migration change_flag_column_to_users_table --table=users
        ```

    1. 作成されたファイルを開き下記のように追記する。

        ```アプリ名ディレクトリ/database/migrations/2020_12_28_130526_change_flag_column_to_users_table.php
        <?php
          
        use Illuminate\Database\Migrations\Migration;
        use Illuminate\Database\Schema\Blueprint;
        use Illuminate\Support\Facades\Schema;
        // 下記を追記
        use Illuminate\Support\Facades\DB;
        
        class ChangeFlagColumnToUsersTable extends Migration
        {
            /**
             * Run the migrations.
             *
             * @return void
             */
            public function up()
            {
                Schema::table('users', function (Blueprint $table) {
                    //下記を追記、データ型やnullの制約などの情報も記載を忘れずにする
                    DB::statement('alter table users change column flag flag tinyint not null comment \'フラッグ用のカラム(1:->on 0->off)\'');
                });
            }
        
            /**
             * Reverse the migrations.
             *
             * @return void
             */
            public function down()
            {
                Schema::table('users', function (Blueprint $table) {
                    //下記を追記
                    DB::statement('alter table users change column flag flag tinyint not null comment \'フラッグ用のカラム\'');
                });
            }
        }
        ```

1. マイグレートと確認
    1. アプリ名ディレクトリで下記コマンドを実行してマイグレートを実行する。

        ```terminal
        $ php artisan migrate
        ```

    1. MySQLにターミナルからログインし下記SQLを実行する。

        ```sql
        show full columns from users;
        ```
    
    1. 下記のようにflagカラムのComment部分が変更された。

        | Field             | Type            | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment                                    |
        | --- | --- | --- | --- | --- | --- | --- | --- | --- |
        | id                | bigint unsigned | NULL               | NO   | PRI | NULL    | auto_increment | select,insert,update,references |                                            |
        | name              | varchar(255)    | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |                                            |
        | email             | varchar(255)    | utf8mb4_unicode_ci | NO   | UNI | NULL    |                | select,insert,update,references |                                            |
        | email_verified_at | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |                                            |
        | password          | varchar(255)    | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |                                            |
        | remember_token    | varchar(100)    | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |                                            |
        | flag              | tinyint         | NULL               | NO   |     | NULL    |                | select,insert,update,references | フラッグ用のカラム(1:->on 0->off)          |
        | created_at        | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |                                            |
        | updated_at        | timestamp       | NULL               | YES  |     | NULL    |                | select,insert,update,references |                                            |

## 個人メモ

- TinyInt型はchange()でカラム情報を修正する事ができない。そのため、DBファサードを用いてSQLを実行した。
- マイグレーションファイルでDBファサードを使用できるようにしてstatementメソッドを用いてカラムコメントを設定するSQLを実行する。
- コメントを設定するSQLのシングルクオート`'`はエスケープして文字列として扱われるようにする。