input('per_page', 20); // 페이지에 표시 할 목록의 수 $title = '입출고 이력'; // Eager Loading 으로 N + 1 문제 해결 $logs = StockLog::with(['product:id,name,sku']) ->latestFirst() ->paginate($perPage); return view('stock_log.list',compact('title','logs')); } public function input(Request $request, $id) { // queryString action 의 default value 는 in 으로 한다. $action = $request->query('action','in'); if(!in_array($action, ['in','out'])) { abort(400, '잘못된 action 값 입니다.'); } $title = ($action == 'in') ? '입고 등록' : '출고 등록'; // Product 조회 ( or 404) $product = Product::findOrFail($id); // Blade 뷰에 Product 전달 return view('stock.input', compact('product', 'title', 'action')); } public function store(Request $request, $id, StockService $stock) { $action = $request->query('action', 'in'); if(!in_array($action, ['in','out'])) { abort(400, '잘못된 action 값 입니다.'); } $product = Product::findOrFail($id); $validated = $request->validate([ 'amount' => ['required', 'integer'] ]); // StockLog::create([ // 'product_id' => $product->id, // 'change_type' => $action, // 'change_amount' => $validated['amount'] // ]); $stock->adjust($product, $action, (int) $validated['amount']); return redirect()->route('product')->with('success', $action == 'in' ? '입고처리 완료' : '출고처리 완료'); } }