LoginSignup
4
4

More than 3 years have passed since last update.

Laravel MySQL DBのカラムタイプを途中で変更する

Posted at

目的

  • Laravelにて新規作成後のDBのカラムタイプの変更方法をまとめる

実施環境

  • ハードウェア環境
項目 情報
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.3 Homwbrewを用いて導入
Laravel バージョン 7.0.8 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

前提情報

  • MySQLを使用しているが確認箇所以外はそのほかのRDSでも作業内容は変わらない。
  • カラム名を変更するとLaravelアプリで自分で実装したデータ取得処理を変更しないといけない場合があるので注視する。
  • すでに存在するカラムのタイプ(データ型や有効文字数など)を変更する際の方法を記載する。
  • 現在のカラムタイプが下記に記載されているものではないと変更することはできない。
    • bigInteger
    • binary
    • boolean
    • date
    • dateTime
    • dateTimeTz
    • decimal
    • integer
    • json
    • longText
    • mediumText
    • smallInteger
    • string
    • text
    • time
    • unsignedBigInteger
    • unsignedInteger
    • unsignedSmallInteger
    • uuid
  • 公式ドキュメントに記載されている内容を元に自分なりにまとめてみる。

概要

  1. ライブラリのインストール
  2. マイグレーションファイルの作成と記載
  3. マイグレート
  4. 確認

詳細

  1. ライブラリのインストール

    1. アプリ名ディレクトリで下記コマンドを実行してライブラリをインストールする。

      $ composer require doctrine/dbal
      
  2. マイグレーションファイルの作成と記載

    1. アプリ名ディレクトリで下記コマンドを実行してマイグレーションファイルを作成する。(下記のファイル名出なくても良い。自分がわかりやすいと思うものにする必要がある。)

      $ php artisan make:migration change_カラムタイプ変更するカラム名_既存カラムタイプ_to_変更後のカラムタイプ_on_所属テーブル名_table --table=所属テーブル名
      
    2. アプリ名ディレクトリで下記コマンドを実行してマイグレーションファイルを開く。

      $ vi database/migrations/YYYY_MM_DD_XXXXXX_change_カラムタイプ変更するカラム名_既存カラムタイプ_to_変更後のカラムタイプ_on_所属テーブル名_table
      
    3. マイグレーションファイルを下記の様に修正する。(public function up()にはマイグレーションにより実行したい処理(今回だとカラムタイプの変更)処理を記載する。public function down()にはロールバックで実行したい(カラムタイプを元に直す)処理)

      database/migrations/YYYY_MM_DD_XXXXXX_change_変更する前のカラム名_to_変更した後のカラム名_on_所属テーブル名_table.php
      <?php
      
      use Illuminate\Database\Migrations\Migration;
      use Illuminate\Database\Schema\Blueprint;
      use Illuminate\Support\Facades\Schema;
      
      class Rename対象カラム名変更前カラムタイプTo変更後カラムタイプOnテーブル名Table extends Migration
      {
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up()
          {
              Schema::table('テーブル名', function (Blueprint $table) {
                  //下記を追記する
                  $table->変更したいデータ型('カラム名')->change();
              });
          }
      
          /**
           * Reverse the migrations.
           *
           * @return void
           */
          public function down()
          {
              Schema::table('テーブル名', function (Blueprint $table) {
                  //下記を追記する
                  $table->今までのデータ型('カラム名')->change();
              });
          }
      }
      
  3. マイグレート

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

      $ php artisan migrate
      
  4. 確認

    1. 下記コマンドを実行してMySQLにターミナルからログインする。(MySQLのパスワードを忘れてしまった方はこちら→Mac ローカル環境の MySQL 8.0 のrootパスワードを忘れた時のリセット方法)

      $ mysql -u root -p
      
    2. 下記を実行してカラムタイプが変更されたことを確認する。

      mysql> show columns from DB.テーブル名;
      

メモ

  • stringからintだとできなかったけどstringからintegerの指定だといけるかも知れん。試してみて

参考文献

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4