この記事で書くこと
オリジナルアプリの方向
バックエンドは、API で投げる
-
コントローラーは view と直接やり取りせず、API を返して json で渡す
-
今回は画像を使用しない
-
なるはやでお願い
table と controller を 1:1 のイメージ
-
1 テーブルにつき、1 コントローラーを用意する
-
コントローラーごとに、テーブルへの CRUD をまとめる
新しい ER 図
-
少し悩んでる->SkillDetail の EXP は合計値を保存しておきたい
- データが大きくなりすぎるかも、経験値 1 億とか大丈夫か
-
chatGPT に聞いたら、合計経験値、Level の構成が通常らしい
create table players (
id int,
name varchar(20),
total_exp int,
level int
)
-
方向性 -> 現行 ER のまま、exp は合計値、Read 以外で Level を編集する
-
Level の初期値は 1 にする
SkillDetail の CRUD
- chatGPT が基本的な例を教えてくれる
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SkillDetailController extends Controller
{
// 一覧取得
public function index(Request $request)
{
// スキルの一覧を取得して返す例
$skillDetails = SkillDetail::all(); // モデルを使用する場合
return response()->json($skillDetails);
}
// 新規作成
public function store(Request $request)
{
// バリデーション例
$validated = $request->validate([
'name' => 'required|string|max:255',
'description' => 'nullable|string',
]);
// データ作成例
$skillDetail = SkillDetail::create($validated);
return response()->json($skillDetail, 201);
}
// 更新
public function update(Request $request, $id)
{
// バリデーション例
$validated = $request->validate([
'name' => 'required|string|max:255',
'description' => 'nullable|string',
]);
// 対象データの更新例
$skillDetail = SkillDetail::findOrFail($id);
$skillDetail->update($validated);
return response()->json($skillDetail);
}
// 削除
public function destroy($id)
{
// 対象データの削除例
$skillDetail = SkillDetail::findOrFail($id);
$skillDetail->delete();
return response()->json(['message' => 'Deleted successfully'], 200);
}
}
-
php artisan make:controller SkillDetailController --resource で簡単に作れる
-
ルーティングは下記で OK
Route::resource('skill-details', SkillDetailController::class);
- エンドポイントの確認
src# php artisan route:list
デプロイ時に気づき
間違えは資産である
- だからエラー画面はたくさん覚えている方が強いのだ、焦ってるから撮らないだけ
The stream or file "/src/storage/logs/laravel.log" could not be opened in append mode:
- 対処
chmod -R guo+w storage
- storage にアクセスできないから権限を与える
php_network_getaddresses: getaddrinfo for db failed:
-
db が名前解決できないらしい
-
docker compose up -d ではなく、docker compose up で、db の起動時エラーを確認
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: password
lower_case_table_names: 1
-
environment の lower_case_table_names を 1 にしておくほうが良いそう
-
設定を変えた場合、ローカルの db フォルダは rm -rf で完全に消しておく
-
起動後は、以下のどれかが抜けてもエラーになる
docker compose exec app bash
src# composer install
src# npm install
src# npm run build
src# php artisan migrate
暫定
- こちらに