Laravelで販売管理システムを作成しているのですが、商品登録をすると2重で登録されてしまいます。
画像登録機能を実装するまでは正常に登録できていましたが、画像の登録ができるようになってから画像があるものとないもので、商品名、メーカー名等が同じものが2つ登録されるようになってしまいました。
Route
1// 商品登録画面を表示 2Route::get('/product/create', 'ProductController@showCreate')->name('create'); 3 4// 商品登録 5Route::post('/product/store', 'ProductController@exeStore')->name('store');
ProductModel
1//テーブル名 2 protected $table = 'products'; 3 4 // 可変項目 5 protected $fillable = 6 [ 7 'company_id', 8 'product_name', 9 'price', 10 'stock', 11 'comment', 12 'image', 13 ]; 14 15 // Companiesテーブルと関連付ける 16 public function company(){ 17 return $this->belongsTo('App\Models\Company'); 18 }
Request
1/** 2 * Determine if the user is authorized to make this request. 3 * 4 * @return bool 5 */ 6 public function authorize() 7 { 8 return true; 9 } 10 11 /** 12 * Get the validation rules that apply to the request. 13 * 14 * @return array 15 */ 16 public function rules() 17 { 18 return [ 19 'product_name' => 'required', 20 'company_id' => 'required', 21 'price' => 'required', 22 'stock' =>'required', 23 'comment', 24 'image', 25 ]; 26 }
Controller
1/** 2 * 商品を登録する 3 * 4 * @return view 5 */ 6 public function exeStore(ProductRequest $request) 7 { 8 // 商品のデータを受け取る 9 $inputs = $request->all(); 10 11 $image = $request->file('image'); 12 13 // 画像がアップロードされていれば、storageに保存 14 if($request->hasFile('image')) 15 { 16 $path = \Storage::put('/public', $image); 17 $path = explode('/', $path); 18 } else { 19 $path = null; 20 } 21 22 $product_id = Product::insertGetId([ 23 'company_id' => $inputs['company_id'], 24 'product_name' => $inputs['product_name'], 25 'price' => $inputs['price'], 26 'stock' => $inputs['stock'], 27 'comment' => $inputs['comment'], 28 'image' => $path[1], 29 ]); 30 31 \DB::beginTransaction(); 32 try { 33 // 商品を登録 34 Product::create($inputs); 35 \DB::commit(); 36 } catch(\Throwable $e) { 37 \DB::rollback(); 38 abort(500); 39 } 40 41 \Session::flash('err_msg', '商品を登録しました。'); 42 return redirect(route('products')); 43 }
view
1@extends('create.layout') 2@section('title', '商品登録') 3@section('create.content') 4<div class="row"> 5 <div class="mb-5 col-md-6 col-md-offset-2"> 6 <h2>商品登録フォーム</h2> 7 <form method="POST" action="{{ route('store') }}" onSubmit="return checkSubmit()" enctype="multipart/form-data"> 8 @csrf 9 10 <div class="form-group"> 11 <label for="title"> 12 商品名 13 </label> 14 <input 15 id="product_name" 16 name="product_name" 17 class="form-control col-md-6" 18 value="{{ old('product_name') }}" 19 type="text" 20 > 21 @if ($errors->has('product_name')) 22 <div class="text-danger"> 23 {{ $errors->first('product_name') }} 24 </div> 25 @endif 26 </div> 27 28 <div class="form-group"> 29 <label for="company_name"> 30 メーカー 31 </label> 32 <br> 33 <select class="form-control col-md-3" name="company_id"> 34 <option selected disabled></option> 35 @foreach($products as $product) 36 <option id="company_id" name="company_id" value="{{ $product->id }}">{{ $product->company_name }}</option> 37 @endforeach 38 </select> 39 @if ($errors->has('company_name')) 40 <div class="text-danger"> 41 {{ $errors->first('company_name') }} 42 </div> 43 @endif 44 </div> 45 46 <div class="form-group"> 47 <label for="price"> 48 価格 49 </label> 50 <input 51 id="price" 52 name="price" 53 class="form-control col-md-3" 54 value="{{ old('price') }}" 55 type="text" 56 > 57 @if ($errors->has('price')) 58 <div class="text-danger"> 59 {{ $errors->first('price') }} 60 </div> 61 @endif 62 </div> 63 64 <div class="form-group"> 65 <label for="stock"> 66 在庫数 67 </label> 68 <input 69 id="stock" 70 name="stock" 71 class="form-control col-md-3" 72 value="{{ old('stock') }}" 73 type="text" 74 > 75 @if ($errors->has('stock')) 76 <div class="text-danger"> 77 {{ $errors->first('stock') }} 78 </div> 79 @endif 80 </div> 81 82 <div class="form-group"> 83 <label for="comment"> 84 コメント 85 </label> 86 <textarea 87 id="comment" 88 name="comment" 89 class="form-control" 90 rows="4" 91 >{{ old('comment') }}</textarea> 92 @if ($errors->has('comment')) 93 <div class="text-danger"> 94 {{ $errors->first('comment') }} 95 </div> 96 @endif 97 </div> 98 99 <div class="form-group"> 100 <label for="image">商品画像登録</label> 101 <input type="file" class="form-control-file" name='image' id="image"> 102 </div> 103 104 <div class="mt-5"> 105 <a class="btn btn-secondary" href="{{ route('products') }}"> 106 キャンセル 107 </a> 108 <button type="submit" class="btn btn-primary"> 109 登録する 110 </button> 111 </div> 112 </form> 113 </div> 114</div> 115<script> 116function checkSubmit(){ 117if(window.confirm('送信してよろしいですか?')){ 118 return true; 119} else { 120 return false; 121} 122} 123</script> 124@endsection
制作環境
Windows
MAMP
Laravel5.8
Laravel歴1か月のため、まだまだ分からないことが多く、質問の仕方も下手でしょうがお力を貸していただけますと幸いです。
あなたの回答
tips
プレビュー