前提・概要
プロジェクトは前回記事にて作成したものを想定。
今回は単純な都道府県マスタを作成してみる。
流れは下記
1.都道府県マスタの作成
①利用ファイル一式作成(コマンド model・controller・migration等一式)
②DBの設定(migration設定)
③投入データ設定(seeder設定)
④seederコマンドで実行されるように設定(DatabaseSeeder設定)
⑤DB登録+データ投入(migrationコマンド)
⑥動作確認
2.作成したデータの表示
①ルーティング設定
②blade.phpの作成
③コントローラーの設定
④動作確認
本日の完成形
1.都道府県マスタの作成
マスタを作るにあたりモデルを作成しようとしたが、オプション何があったか探していたところ記事を見つけた。
上記の記載があるが、「-a」オプションで全て作ってしまって問題ないと思う。
(-aオプションで、マイグレーション・モデル・ファクトリー・コントローラー・リソース全て作成してくれるとのこと)
①model(-aオプションで全て)を作成する
以下コマンドで、都道府県マスタを作成する。
cd 社内サイト
php artisan make:model prefecture -a
②migrationファイルの修正
DBの構造をまずは考える。
都道府県マスタなので、必要なのは名称くらい。
番号はid管理でいいので、都道府県名とカナだけ持つ形を想定。
また、今回に限らずテーブルは全てid+timestamp+論理削除(softdelete)+作成者ID+更新者ID
を持つ形とする。
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に初期投入できるデータのこと。
ここで指定したデータを投入することもできるし、テストデータを作らせることができる。
今回はデータを投入する。エクセル使えばそこまで大変じゃない。(めんどくさくはある)
・・・
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も再作成されるので、登録したデータが消え再登録しないとログインできなくなる。
そのため事前にこちらで作成しておくのもあり。
・・・
public function run()
{
$this->call(PrefectureSeeder::class);
}
・・・
⑤migrationの実行
以下コマンドにてmigrationを実行する。
--seedオプションをつけることで作成したシードファイルを取り込んでくれる。
php artisan migrate:refresh --seed
⑥mysqlにデータが取り込まれていることを確認
2.画面の作成
先程作成したデータを画面に表示させるようにする。
①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 とする。
内容はいったん表示だけさせるので、下記とする。
@extends('welcome')
@section('title', '受注データ')
@section('content')
@foreach($queryResult as $t)
{{$t->TDFK;}}<br>
@endforeach
@endsection
こちらのページを作成しておき、コントローラー経由で渡す際に、$queryResultとしてSQLにて取得した結果を渡すようにする。
③コントローラーの設定
コントローラー→viewの設定を行う。
削除データ以外を全て取得し、ページへパラメータとして渡している。
・・・
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)
;
}
}