Laravel8.0のMigrationツールを使ってテーブル作成した話

2020年9月18日

まえがき

作りたいシステムができたので久しぶりに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)

#作成されたテーブルの確認

FieldTypeNullKeyDefaultExtra
idbigint unsignedNOPRINULLauto_increment
memovarchar(255)NONULL
created_attimestampYESNULL
updated_attimestampYESNULL



Posted by karaagelovers