Laravelに搭載されている、DBのテーブルを操作するマイグレーションとシーディングについてメモ。
概要
マイグレーション
- マイグレーションとは、データベースのバージョン管理機能である
- CREATE TABLEする際に使用する
- 以下が指定できる
- テーブル名
- カラム名
- データ型
- phpの関数で実行する。
- 以下が指定できる
シーディング
- シーディングとは、テーブルに対してデータを登録する際に利用する
マイグレーションのやり方
作業の流れ
以下の3ステップで行う。
- マイグレーション用のファイルを作成する
- 上記のファイル内にマイグレーションのスクリプトを記述する
- 上記のファイルをで実行すると、Tableが作成される
具体的手順
1. マイグレーション用のファイルを作成する
マイグレーション用のファイルを用意する。
以下のコマンドで雛形ファイルが生成できる。
php artisan make:migration ファイル名
例)
$ php artisan make:migration create_store_table
Created Migration: 2023_02_02_071927_create_store_table
ファイル名は、任意っぽいが、
「create_テーブル名_table」
とするとわかりやすいので良いみたい。
例)hoge テーブル作成用のファイルを作成する
php artisan make:migration create_hoge_table
2. 上記のファイル内にマイグレーションのスクリプトを記述する
マイグレーション用のファイルを作成したら、
中身を編集してスクリプトを作る。
make:migration コマンドを実行すると以下の内容のファイルができる。
2つの関数が用意されている。
- function up()
- function down()
function up()
テーブル作成時に使う関数。
デフォルトで以下の記述があると思う。
$table->id();
$table->timestamp();
上記に書きたしてく。
‘name’ という名前のテーブルを文字列型のデータ型で作成したい場合は、
$table->string('name');
と書く。見てわかるが、「string」の部分がデータ型。
よく使いそうな データ型は、Qiitaにまとめてくださっている人がいるのでそちら参考。
- increments(‘id’) … 「符号なしINT」を使用した自動増分ID(主キー)
- binary(‘カラム名’) … バイナリデータカラム
- boolean(‘カラム名’) … 真偽値カラム
- char(‘カラム名’, 長さ) … 長さを指定する文字列カラム
- date(‘カラム名’) … 日付カラム
- time(‘カラム名’) … 時間カラム
- dateTime(カラム名) … 日時カラム
- double(‘カラム名’, 桁数, 小数点以下桁数) … ○ 桁で小数点以下× 桁の小数カラム
- enum(‘カラム名’, [‘定数’, ‘定数’]) … ENUMカラム
- integer(‘カラム名’) … 数値データカラム
- json(‘カラム名’) … JSONフィールドカラム
- timestamp(‘カラム名’) … TIMESTAMPカラム
- timestamps() … created_atとupdate_atカラム
- nullableTimestamps() … NULL値を許す以外、timestamps()と同じ
- string(‘カラム名’) … VARCHARカラム
- string(‘カラム名’, 長さ) … 長さ指定のVARCHARカラム
- text(‘カラム名’) … TEXTカラム
すべてのデータ型を見るには、
Laravel日本語マニュアル%3B%0A%7D)%3B-,%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%E3%82%AB%E3%83%A9%E3%83%A0%E3%82%BF%E3%82%A4%E3%83%97,-%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%E3%83%93%E3%83%AB%E3%83%80%E3%81%AEBlueprint)を参照する。
ちなみにenum型はあんま使わんほうがいいかも。Qiita
function down()
テーブル削除時に使う関数。
3. 上記のファイルをartisan migrateコマンドで実行すると、Tableが ~~更新(~~ 作成 ~~、削除)~~ される
以下のコマンドでマイグレーションが実行される。
php aritsan migrate
「Could not open input file: artisan」って怒られる場合
php aritsan migrate
コマンドを実行した際、
「Could not open input file: artisan」って怒られたときは、
実行場所が間違っている可能性が高い。
Laravelディレクトリのトップディレクトリに移動してから実行すること。
「 SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: NO) (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = ‘BASE TABLE’)」って怒られる場合
SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: NO) (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = ‘BASE TABLE’)
のようなメッセージが出たときは、MySQLへアクセスする情報が間違っている。
以下いずれかを確認する。
- .env
- config/database.php
拙僧は.envがデフォのままだった。てへぺろ。
- artisanコマンドとは、Laravelに用意された、Laravelのなんやかんやを行う際に使用するコマンド
down()メソッドを使ってもとに戻したい場合
down()メソッドを実行するには以下のコマンド。
php artisan migrate:rollback
参考文献
コメント