PHPで初めてのWebアプリケーション開発　DB(MySQL)設定　備忘録6

#前提
PHPを使ったWebアプリケーションの開発知識が必要になったので、開発過程の備忘録、知識のインプット・アウトプットを目的としている。

###環境
macOS Catalina 10.15.3
Laravel 7.10.3
PHP 7.3.11

#備忘録6　目次
####MySQL接続
- MySQLのインストール
- MySQLの認証プラグインの変更
- データベースの作成
- Laravelの.envファイルの修正
- laravelのconfig/databese.phpファイルの修正

####テーブルの作成
- マイグレーションファイルの作成
- シーダーファイルの作成
- マイグレートの実行
- テーブルを画面に表示する


##MySQLに接続
手元にある「Laravel 入門」ではSQLiteの接続方法を紹介しているが、MySQLを利用したかったので、MySQLの接続方法を確認。

###MySQLのインストール
MySQLもHomebrewでインストール。

参考にした記事→[「【Laravel】MySQLの接続方法を徹底解説【コピペでOK】」](https://yaba-blog.com/laravel-db/)

###MySQLの認証プラグインの変更
認証プラグインの変更も参考にした記事通りに実行したら、特にエラーも無く接続できた。

参考にした記事→[「【Laravel】MySQLの接続方法を徹底解説【コピペでOK】」](https://yaba-blog.com/laravel-db/)

###データベースの作成
作成しているアプリのデータベースを作成する。
ターミナルでMySQLにログイン後、以下のコマンドを入力。

```
create database NanaitaApp（データベース名）;
```
データベースができているか確認

```
show databases;
```

![database.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593561/88dc007d-41aa-2401-b980-80c1b68ffe81.png)



###Laravelの.envファイルの修正
変更箇所のみ記載
「DB_DATABASE=''」は作成したデータベース名。

```.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=NanaitaApp
DB_USERNAME=root
DB_PASSWORD=secret
```

###laravelのconfig/databese.phpファイルの修正
変更箇所のみ記載

```php:databese.php
'mysql' => [
    'database' => env('DB_DATABASE', 'NanaitaApp'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', 'secret'),
  ],
```

##テーブルの作成
テーブルの作成は、勉強も兼ねてLaravel側からマイグレーションとシーディングを使って行う。

###マイグレーションファイルの作成
マイグレーションファイルはターミナルから作成
カレントディレクトリをプロジェクトフォルダに移動してから、以下のコマンドを実行。

```
php artisan make:migration create_nana_users_table
```

マイグレーションファイル
マイグレーションファイルにテーブルの中身を追加

```php:nana_users
public function up()
    {
        Schema::create('nana_users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('mail');
            $table->string('password');
            $table->timestamps();
        });
    }
```

ファイルに追記したら以下のコマンドでマイグレートを実行

```
php artisan migrate
```

MySQLにログインしてテーブルとカラムが作成されているか確認

```
use NanaitaApp;
show tables;
desc nana_users;
```
データベースの中にテーブルが作成されていることを確認
![データベース中身.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593561/32e89708-c20b-3cd7-da64-ac43a2ebaefb.png)
テーブルの中にカラムが作成されていることを確認
![table2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593561/e2d731fe-3982-5a5c-c900-ff440e278ed5.png)

###シーダーファイルの作成
ダミーレコードを作成するためにシーディング機能を使ってシーダーファイルを作成
シーダーファイルはターミナルから作成
カレントディレクトリをプロジェクトフォルダに移動してから、以下のコマンドを実行

```
php srtisan make:seeder NanaUsersTableSeeder
```

プロジェクトフォルダでdatabase/seedsにNanaUsersTableSeeder.phpファイルが作成されているのを確認

シードを作成する処理を追記

```php:NanaUsersTableSeeder
<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class NanaUsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      $param = [
      'name' => 'taro',
      'mail' => 'taro@yamada.jp',
      'password' => '12',
  ];
  DB::table('nana_users')->insert($param);

  $param = [
      'name' => 'hanako',
      'mail' => 'hanako@flower.jp',
      'password' => '34',
  ];
  DB::table('nana_users')->insert($param);

  $param = [
      'name' => 'sachiko',
      'mail' => 'sachiko@happy.jp',
      'password' => '56',
  ];
  DB::table('nana_users')->insert($param);
    }
}
```

作成したファイルが実行されるように、デフォルトで用意されているDatabaseSeeder.phpに登録する。
database/seedsにあるDatabaseSeeder.phpを以下のように修正

```php:DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
       $this->call(NanaUsersTableSeeder::class);
    }
}
```

最後にターミナルからシーディング処理を実行する

```
php artisan db:seed
```

###テーブルを画面に表示する
今回はテスト用にtest.blade.phpを作成して表示

```php:test.blade.index
@extends('layouts.loginform')

@section('title','test')

@section('content')
<div class='list-card'>
<table>
   <tr><th>Name</th><th>Mail</th><th>Password</th></tr>
   @foreach ($items as $item)
       <tr>
           <td>{{$item->name}}</td>
           <td>{{$item->mail}}</td>
           <td>{{$item->password}}</td>
       </tr>
   @endforeach
</table>
</div>
@endsection
```
サーバーを起動してlocalhost:8000/testにアクセス

![テーブル表示画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593561/0c02706e-8b23-cb74-f596-f06ea0f3588e.png)

無事表示された。

#おわりに
次回は掲示板機能の実装を行っていきたいと思う。