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