社内サイト構築勉強⑥(さくらのレンタルサーバ+Laravel)：新規マスタ画面の作成（テーブル含む）

# 前提・概要
プロジェクトは前回記事にて作成したものを想定。

今回は単純な都道府県マスタを作成してみる。

流れは下記
1.都道府県マスタの作成
　①利用ファイル一式作成（コマンド　model・controller・migration等一式）
　②DBの設定（migration設定）
　③投入データ設定（seeder設定）
　④seederコマンドで実行されるように設定（DatabaseSeeder設定）
　⑤DB登録＋データ投入（migrationコマンド）
　⑥動作確認
2.作成したデータの表示
　①ルーティング設定
　②blade.phpの作成
　③コントローラーの設定
　④動作確認
　

# 本日の完成形
DBに登録したデータを検索し、画面に表示させるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/c029b26d-e959-2ac9-0dbf-edcf116c336f.png)



## 1.都道府県マスタの作成
マスタを作るにあたりモデルを作成しようとしたが、オプション何があったか探していたところ記事を見つけた。

https://qiita.com/niisan-tokyo/items/9c799989cb535489f201

上記の記載があるが、「-a」オプションで全て作ってしまって問題ないと思う。
（-aオプションで、マイグレーション・モデル・ファクトリー・コントローラー・リソース全て作成してくれるとのこと）

### ①model（-aオプションで全て）を作成する
以下コマンドで、都道府県マスタを作成する。
```bat:cmd
cd 社内サイト
php artisan make:model prefecture -a 
```

### ②migrationファイルの修正
DBの構造をまずは考える。
都道府県マスタなので、必要なのは名称くらい。
番号はid管理でいいので、都道府県名とカナだけ持つ形を想定。
また、今回に限らずテーブルは全てid＋timestamp＋論理削除（softdelete）＋作成者ID＋更新者ID
を持つ形とする。

```php:2023_03_06_142019_create_prefectures_table.php
    public function up()
    {
        Schema::create('prefectures', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
            // 以下add
			$table->softDeletes();
			$table->integer('REGISTID')->nullable();
			$table->integer('UPDATEID')->nullable();
			$table->string('TDFK')->nullable();
			$table->string('TDFK_KANA')->nullable();
        });
    }
```

### ③seederファイルの修正
seederはDBに初期投入できるデータのこと。
ここで指定したデータを投入することもできるし、テストデータを作らせることができる。
今回はデータを投入する。エクセル使えばそこまで大変じゃない。~~（めんどくさくはある）~~

```php:PrefectureSeeder.php
    ・・・
    use App\Models\prefecture;
    ・・・
        public function run()
        {
            \DB::table('prefectures')->truncate();
    
            $obj = new prefecture;
            $obj->REGISTID = '0';
            $obj->UPDATEID = '0';
            $obj->TDFK = '北海道';
            $obj->TDFK_KANA = 'ホッカイドウ';
            $obj->save();
            ・・・
        }
```

### ④DatabaseSeederの設定
seederにて作成したseederを呼び出すように設定する。
またusertableも再作成されるので、登録したデータが消え再登録しないとログインできなくなる。
そのため事前にこちらで作成しておくのもあり。
```php:DatabaseSeeder.php
・・・
    public function run()
    {
        $this->call(PrefectureSeeder::class);
    ｝
・・・
```


### ⑤migrationの実行
以下コマンドにてmigrationを実行する。
--seedオプションをつけることで作成したシードファイルを取り込んでくれる。
```bat:cmd
php artisan migrate:refresh --seed
```
Seeder完了画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/9732ee9e-287c-243e-2294-53ce752f0427.png)

### ⑥mysqlにデータが取り込まれていることを確認
ローカルのDBにデータが取り込まれていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/3fea6337-a2b7-ce79-be47-bcc120c3330c.png)


## 2.画面の作成
先程作成したデータを画面に表示させるようにする。

### ①web.phpにてルーティングの設定
まずは画面→コントローラーへのルーティングを設定する。
```php:web.php
//add
Route::get('prefecture', [App\Http\Controllers\PrefectureController::class, 'index'])->name('prefecture');
```

### ②表示するblade.phpの作成
表示するblade.phpを作成する。
構成はresource -> views -> maintenance -> prefecture -> index.blade.php　とする。
内容はいったん表示だけさせるので、下記とする。
```index.blade.php
@extends('welcome')
@section('title', '受注データ')
@section('content')

@foreach($queryResult as $t)
    {{$t->TDFK;}}<br>
@endforeach

@endsection
```

こちらのページを作成しておき、コントローラー経由で渡す際に、$queryResultとしてSQLにて取得した結果を渡すようにする。


### ③コントローラーの設定
コントローラー→viewの設定を行う。
削除データ以外を全て取得し、ページへパラメータとして渡している。

```php:PrefectureController.php
・・・
use App\Models\prefecture;

class PrefectureController extends Controller
{
    public function index()
    {
        $queryResult = prefecture::query()
            ->selectRaw('*')
            ->whereNull('deleted_at')
            ->paginate(100)
            ;

        return view('maintenance.prefecture.index')
            -> with('queryResult', $queryResult)
        ;
    }
}
```
### ④動作確認
ブラウザから設定したパスを呼び出してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/3be0b4c2-fe83-c2e3-ce32-a8f630f746eb.png)