laravel filament 実装方法の調査メモ 複数テーブル同時更新や数量×単価=金額の計算処理など

目次
laravel filament 実装方法の調査メモ
画面で数量×単価=金額などの計算方法サンプル
Filament calculated form fields
XXXXResouce.php に計算functionを作り、$form 内に 項目->afterStateUpdated(function …)
複数テーブルの更新処理
トランザクションを明示し、複数のクエリ、テーブル更新処理をする。
サンプル1
public function userUpdate ($request, $userId, $storeId) {
$postData = $request->post();
$result = DB::transaction(function() use ($postData, $userId, $storeId) {
DB::table('users')->where('id', $userId)->update($postData['users']);
DB::table('stores')->where('id', $storeId)->update($postData['stores']);
return true;
});
return $result;
}
サンプル2
public function userUpdate($request, $userId, $storeId)
{
$postData = $request->post();
DB::beginTransaction();
try {
DB::table('users')->where('id', $userId)->update($postData['users']);
DB::table('stores')->where('id', $storeId)->update($postData['stores']);
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
}
return true;
}
サンプル3
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; // ★ DBファザードをuse
class UserController extends Controller
{
/**
* 登録処理
*
* @param Request $request
* @return \Illuminate\Routing\Redirector
* @throws \Exception
*/
public function store(Request $request)
{
try {
// ★ トランサクションを開始する
DB::beginTransaction();
// 基本情報を登録する
$user = User::create([
'name' => $request->name,
'email' => $request->email
]);
// 詳細情報を登録する
UserDetail::create([
'user_id' => $user->id,
'job' => $request->job,
'age' => $request->age
]);
// ★ 変更を確定 (コミット)する
DB::commit();
} catch (\Exception $e) {
// ★ 変更を取り消し (ロールバック)する
DB::rollback();
throw new \Exception($e);
}
// (以下省略) 登録後のリダイレクトなど
}
}
参考)laravelで1トランザクションで複数クエリを実行する
https://qiita.com/n-sawada-12345/items/660829f3154ef231bc37
参考)【Laravel】複数のDB処理を行う際はtransactionを使う
キーワード:laravel トランザクション 複数テーブル、Laravel 複数 DB トランザクション