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

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 トランザクション