前提・実現したいこと
・laravelにて、在庫管理を目的とするサービスを作成中
・表示するデータ表の各レコードごとにformタグを持たせ、それぞれに「個数を入力し、submitする」機能。
もとい、更新する機能を持たせたい。
現在の挙動の詳細としては、各々POST送信してもエラーは出ないが、データも更新されないという状態。
発生している問題・エラーメッセージ
わざとバリデーションで引っかかるようにして試した結果、
・$request->id、 $request->numbers ともに、各formごとに送信されているみたい。(バリデはget送信みたいですけどね‥)
・タイポも見つけられない状態で、データが更新されないことに絶望している。
該当のソースコード
web
1Route::get('inventory_control', 'StockModelController@indexGet')->middleware('auth'); 2Route::post('inventory_control', 'StockModelController@indexPost');
StockModelController
1<?php 2 3namespace App\Http\Controllers; 4 5use App\Models\User; 6use App\Models\Stock; 7use Illuminate\Http\Request; 8use Illuminate\Support\Facades\Auth; 9 10class StockModelController extends Controller 11{ 12 public function indexGet(Request $request) 13 { 14 $user = Auth::user(); 15 $userInfo = $user->withCount('stocks')->get(); 16 $sort = $request->sort; 17 if (isset($sort) == true) { 18 $stockData = Stock::where('user_id', $user->id) 19 ->orderBy($sort, 'asc') 20 ->paginate(20); 21 } else { 22 $stockData = Stock::where('user_id', $user->id) 23 ->paginate(20); 24 } 25 return view('homepage', compact('user', 'userInfo', 'sort', 'stockData')); 26 } 27 28 public function indexPost(Request $request) 29 { 30 $this->validate($request, Stock::$rules); 31 $stockFind = Stock::find($request->id); 32 $stockFind->numbers = $request->numbers; 33 $stockFind->save(); 34 return redirect('/inventory_control'); 35 } 36以下略、
Stock
1(※Stockモデルです。バリデーションが記述してあります。) 2 3<?php 4 5namespace App\Models; 6 7use Illuminate\Database\Eloquent\Factories\HasFactory; 8use Illuminate\Database\Eloquent\Model; 9 10class Stock extends Model 11{ 12 use HasFactory; 13 14 protected $guarded = array('id'); 15 16 public static $rules = array ( 17 'category' => 'max:50', 18 'goods' => 'required|max:50', 19 'numbers' => 'required|lte:9999', 20 'remarks' => 'max:1000', 21 ); 22 23}
homepageBladePhp
1@include('includes.head') 2 3<body> 4 <div class="container header"> <!-- header --> 5 6 7 <div class="siteTitle text-center"> 8 <h1 class="siteTitle mt-4 pb-1"><a href="/inventory_control" style="text-decoration: none;"> 9 <b class="text-success"><i class="fas fa-boxes mr-3"></i>在庫管理くん<i class="fas fa-boxes ml-3"></i></b> 10 </a></h1> 11 </div> 12 13 <hr class="w-75 pb-0 mb-0"> 14 15 <div class=""> 16 17 <div class="d-block userName text-center"> 18 @if (Auth::check()) 19 <p class="text-muted userInfo_M pt-2 pb-1"> <b><i class="fa fa-user h4" aria-hidden="true"></i> 『 {{$user -> name}} 』さん</b> </p> 20 @else 21 <p class="text-muted userInfo_M p-2"> <a href="/register"><b>ユーザー登録</b></a> </p> 22 @endif 23 </div> 24 25 <div class="text-center d-block my-2 pt-2"> 26 <a id="logout-link" class="logout-links" href="{{ route('logout') }}">{{ __('ログアウト') }}</a> / <a class="" href="/inventory_control/withdrawal">退会</a> 27 </div> 28 29 <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;"> 30 @csrf 31 </form> 32 33 </div> 34 35 <hr class="pt-0 mt-0"> 36 37 </div> <!-- /header --> 38 39 40 @foreach($userInfo as $info) 41 @if ( $info->id == $user->id ) 42 @php 43 $counter = $info->stocks_count; 44 @endphp 45 @break 46 @endif 47 @endforeach 48 49 50 <div class="dataCount ml-5"> 51 <p class="text-muted d-inline">登録データ数: 52 <div id="userInfoCount" class="text-muted d-inline"> 53 {{ $counter }} 54 </div> 55 </p> 56 </div> 57 58 59 <div class="container mainContents"> <!-- mainContents --> 60 61 <div class="text-center mt-4 mb-5"> 62 <a class="btn btn-lg btn-primary" href="/inventory_control/data_register" role="button">データ登録</a> 63 </div> 64 65 66 @error('numbers') 67 <div class="row flashingWarning mt-0 mb-5"> 68 <div class="col-1"></div> 69 <div class="col w-75"> 70 <p class="bg-warning text-danger text-center">個数を入力するか、9999以下の数にして下さいっ!</p> 71 </div> 72 <div class="col-1"></div> 73 </div> 74 @enderror 75 76 77 @foreach($userInfo as $info) 78 @if ( $info->id == $user->id ) 79 @php 80 $counter = $info->stocks_count; 81 @endphp 82 @break 83 @endif 84 @endforeach 85 86 @if($counter == 0) 87 <div class="text-center h4">登録データがありません。</div> 88 @else 89 <table class="noset-table table table-hover table-dark recordTable"> 90 <thead> 91 <tr class="text-center"> 92 <th><a href="/inventory_control?sort=category">カテゴリー</a></th> 93 <th><a href="/inventory_control?sort=goods">品 物</a></th> 94 <th><a href="/inventory_control?sort=numbers">個 数</a></th> 95 <th><a href="/inventory_control?sort=remarks">備 考</a></th> 96 </tr> 97 </thead> 98 <tbody> 99 @foreach ($stockData as $stock) 100 <tr class="recordData table-secondary text-dark"> 101 <td class="text-center align-middle"> 102 <div class="sendLink d-none">{{$stock->id}}</div> 103 {{Str::limit( $stock->category, 14 )}} 104 </td> 105 <td class="text-center align-middle"> 106 {{Str::limit( $stock->goods, 14 )}} 107 </td> 108 <td class="text-center w-25 align-middle"> 109 <form method="POST"> 110 @csrf 111 <input name="id" type="hidden" value="{{$stock->id}}"> 112 <input name="numbers" type="number" value="{{$stock->numbers}}" class="pl-3 my-1 text-center w-75"> 113 <input type="submit" value="送信" class="my-1"> 114 </form> 115 </td> 116 <td class="px-3 align-middle"> 117 <pre>{{Str::limit( $stock->remarks, 40 )}}</pre> 118 </td> 119 </tr> 120 @endforeach 121 </tbody> 122 </table> 123 @endif 124 125 126 <div class="paginate d-sm-none d-flex justify-content-center my-5 pagination-lg">{{ $stockData->appends(['sort' => $sort])->links('vendor.pagination.bootstrap-4') }}</div> <!-- Mobile_paginate--> 127 128 <div class="paginate d-none d-sm-flex justify-content-center my-5">{{ $stockData->appends(['sort' => $sort])->links('vendor.pagination.bootstrap-4') }}</div> <!-- NotMobile_paginate--> 129 130 131 </div> <!-- /mainContents --> 132 133@include('includes.footer')
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。