【フレームワークLaravel】データベースのマイグレーションとは?実行するとどうなるの?
| 更新: 2024/09/25 | 2907文字
今回はLaravelマイグレーションを取り上げます。最近(2024-09)の引き合いがWordPressばっかりでLaravel全然できてないんですけど、将来的に自分でなんか作るときに使うかもしれないので学習していました。さっそくマイグレーションやってみましょう。
目次
Laravelのマイグレーションとは?
データベースと連携しない場合は使う機会がないかもしれないんですけど、Laravelに搭載されているデータベースのバージョンやテーブル定義などの管理機能です。
SQL手打ちでやってもいいんですけど、テーブル構成が複雑になってくるとめんどくさく、打ちミスも怖いです。またチーム内で共有したり、同じ設計を使いまわしたりするときは重宝するのではないでしょうか。詳しくは公式ドキュメントもご覧ください。
Database: Migrations(英語・ブラウザで翻訳すればok)
https://laravel.com/docs/11.x/migrations
Laravelのマイグレーションを実行してみよう
データベース(sqlite) 元の状態
もとの状態はこんな感じ。わかりやすくするため、余計なテーブルは抜いておきました。以前使ったもの(sqlite_sequence,peopleテーブル)は残っていますが、ここにマイグレーションで新しいテーブルを作ってみたいと思います。
なお、環境設定ファイルをいじってデータベースに接続する方法については、当サイトの過去記事でも解説していますので、こちらもご覧ください。
(過去記事)DBクラスを使って、SQLiteデータベースのCRUD操作をやってみる
https://division-web.atelier-ss-agency.com/10473/laravel-db-class-crud/
1:コマンドでマイグレーションファイル作成
まずは、コマンドでマイグレーションファイルを作ります。cdでlaravelが入っているディレクトリを指定して、artisan make:migrationを入れます。うしろのcreate_t_user_tableというのは、『t_user』というテーブルを作りたいので、このように書いています(つくりたいテーブル名入れます)。
php artisan make:migration create_t_user_table
うまくいくと Migration [〇〇] created successfully.が出ます。
laravelインストール場所\database\migrations内に、このようにファイルが出来ました。この段階では、マイグレーションファイルができただけで、実際のデータベースには反映していません。
2024_09_12_133946_create_t_user_table.phpのなかみです。upとdownという2種のメソッドがあり、upがテーブル生成、downがテーブル削除です。
2:マイグレーションファイル内のupメソッドをエディット
ではさっそく、t_userテーブルの定義を書いていきます。以下のようなコードをメソッド内に追加しました。stringやintegerのようにそれぞれ型を指定しています。incrementsはオートインクリメントです。
$table->string('mail','100');
$table->string('name','100');
$table->integer('age')->default(60);
ちなみに、管理人はちょっと間違ってるんですけど、SQLiteはVARCHAR(10)と指定しても、仕様上500万文字まで入るらしいです(指定しても意味がない)。mysqlとかだったらokなんですけど、SQLiteではstring('mail','100');のように、100文字指定は不要なようです。
3:php artisan migrateコマンドでマイグレーション実行
そして、ここでやっとマイグレーション実行。laravelインストールディレクトリでコマンドを入れて実行しました。
php artisan migrate
ちなみに、今回作ったマイグレーションファイル以外に『2014_10_12_100000_create_password_resets_table』『2019_12_14_000001_create_personal_access_tokens_table』のマイグレーションが実行されています。
これたぶん標準搭載のやつだと思うんですけど、要らないときはサービスプロバイダをエディットして入らないようにする、という手法があるみたいです(管理人はまだ試していません)。
マイグレーション実行結果
上記のコマンドを実行して、やっとマイグレーションが実行済みとなります。 こんな感じで『t_userテーブル』が、データベース内に作成されました。
先の段落で言ったように、文字列の『mail/name』スキーマがvarchar not nullが入っているけど、文字数が入っていません。数値型ageのデフォルト値は反映されていますね。
マイグレーションのロールバック(戻す)について
マイグレーションはロールバックで元の状態に戻してやり直すことができます。コマンドは以下の通り。
管理人はよく間違えるので覚えておきます(笑)
あとがき・まとめ
- Laravelにはデータベースのバージョンやテーブル定義などの管理する、マイグレーションの機能がある
- マイグレーション手順は、コマンドでファイルを作成し、定義とかを書いてコマンドで実行
- 間違えたときなどのため、ロールバックも覚えておくとベター
まとめると、こんなところでしょうか。この段階ではデータベースのテーブルが定義されただけで実際のデータが入っていないので、手入力でいれたり、シーディングを使ったりします。
【カテゴリ】- Laravel
【タグ】- Laravel, データベース