Laravel8.0のMigrationツールを使ってテーブル作成した話
まえがき
作りたいシステムができたので久しぶりにPHPの世界へ。そして初めてのLaravelの世界へ。
調べるとmigrationツールやらでテーブル作成ができるみたいなので試しにやってみました。
手動でmysqlでテーブル作成をした方が早そうな作業ですが、テストやリリースの自動化をするためにはこのmigrationツールを使った方が良さそう。
作業環境
PHP 7.3.11
Laravel 8.3.0
Mysql 8.0.21
Mac
作業工程
DBセットアップ
mysqlインストール
#Homebrewを更新 バグ等修正されているので #制約がなければなるべく最新のバージョンをインストールするのが吉 brew update #mysqlのバージョン確認 brew info mysql #このバージョンのmysqlがインストールされる >mysql: stable 8.0.21 (bottled) #mysqlのインストール brew install mysql ##おまけ mysql8系で良い人はスキップ #バージョンを8系から5系に落としたい場合は #brew search mysql #でインストールできるバージョン確認して #以下のコマンドの通り引数にバージョンを指定することで #インストールしたいバージョンのmysqlをインストールできる #brew install mysql@5.6 #brew install mysql@5.7 #########おまけおわり######### #mysqlにログインできることの確認 mysql -u root
mysqlDB作成
#mysqlにログイン(既にログインしていたらスキップ) mysql -u root #DB作成 create database <データベース名>; 例)create database sample; #DB作成確認 show databases;
mysqlユーザー作成
#Laravelから接続するためのユーザー作成 create user '<ユーザー名>'@'%' identified by '<パスワード>' #例)create user 'db_user'@'%' identified by 'db_user'; ユーザー名: db_user パスワード: db_user
mysqlユーザー権限付与
GRANT ALL ON <データベース名>.* TO '<ユーザー名>'@'%'; 例)GRANT ALL ON sample.*TO 'db_user'@'%'; #権限付与確認 show grants for '<ユーザー名>'@'%'; 例)show grants for 'db_user'@'%'; ##うまくいかない時は半角、全角スペースとかスペルミスを確認してみましょう♪
DB接続方式の変更
#ユーザー作成時にmysqlのデフォルト設定でcaching_sha2_passwordの接続方式が設定されている。 #これだとLaravelから接続できないので接続方式を変更する alter user '<ユーザー名>' identified with mysql_native_password by '<パスワード>'; 例)alter user 'db_user' identified with mysql_native_password by 'db_user'; #変更しないと以下のエラーが出る # Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknownto the client (SQL: select * from information_schema.tables where table_schema = samples and table_name = migrations) #設定を確実に反映させる flush privileges;
Laravelセットアップ
DBの接続情報の変更
.envのDB接続先を上記で作成した内容に変更する(laravelのプロジェクトフォルダー直下にあります)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=db_user
DB_PASSWORD=db_user
Migrationファイル作成
php artisan make:migration create_<テーブル名>_table
例)php artisan make:migration create_samples_table
#テーブル名は複数形が良いらしい
#同じテーブル名のファイルを複数個作成できない
#こんなエラーが出る
php artisan make:migration create_samples_table
InvalidArgumentException
A CreateSamplesTable class already exists.
#ファイルを作成するとファイルに日付と番号が振られ、
#作成したファイルの順にテーブル作成が実行される
例)
php artisan make:migration create_tests_table
Created Migration: 2020_09_20_065316_create_tests_table
スキーマ情報追加
1で作成されたファイルのup関数内にスキーマ情報を追加する
スキーマに対応するfunction一覧はこのページの使用できるカラム一覧に載っています。
https://readouble.com/laravel/5.5/ja/migrations.html
Sample
public function up() { Schema::create('samples', function (Blueprint $table) { $table->id(); $table->string('memo');//テストで追加 $table->timestamps(); }); }
テーブル作成の実行
php artisan migrate
#ログ
Migration table created successfully.
Migrating: 2020_09_18_055814_create_samples_table
Migrated: 2020_09_18_055814_create_samples_table (4.68ms)
#作成されたテーブルの確認
Field | Type | Null | Key | Default | Extra |
id | bigint unsigned | NO | PRI | NULL | auto_increment |
memo | varchar(255) | NO | NULL | ||
created_at | timestamp | YES | NULL | ||
updated_at | timestamp | YES | NULL |
ディスカッション
コメント一覧
まだ、コメントがありません