前提・実現したいこと
Laravelで商品の販売管理システムのためのWEBアプリケーションを作成しており、商品登録機能を実装させようとしたところ、登録ボタンを押すと500エラーになってしまいます。エラーログで出た文章は以下です。
発生している問題・エラーメッセージ
local.ERROR: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'a' for column 'price' at row 1 (SQL: insert into `products` (`product_name`, `price`, `stock`, `comment`, `updated_at`, `created_at`) values (a, a, a, a, 2021-11-15 18:28:37, 2021-11-15 18:28:37)) {"exception":"[object] (Illuminate\Database\QueryException(code: HY000): SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'a' for column 'price' at row 1 (SQL: insert into `products` (`product_name`, `price`, `stock`, `comment`, `updated_at`, `created_at`) values (a, a, a, a, 2021-11-15 18:28:37, 2021-11-15 18:28:37)) at C:\MAMP\htdocs\Laravel_Project\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664, PDOException(code: HY000): SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'a' for column 'price' at row 1 at C:\MAMP\htdocs\Laravel_Project\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458)
Route
1 2// 商品一覧画面を表示 3Route::get('/product', 'ProductController@showList')->name('products'); 4 5// 商品登録画面を表示 6Route::get('/product/create', 'ProductController@showCreate')->name('create'); 7 8// 商品登録 9Route::post('/product/store', 'ProductController@exeStore')->name('store'); 10
Model
1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Product extends Model 8{ 9 //テーブル名 10 protected $table = 'products'; 11 12 // 可変項目 13 protected $fillable = 14 [ 15 'company_id', 16 'product_name', 17 'price', 18 'stock', 19 'comment' 20 ]; 21} 22
Controller
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Models\Product; 7use App\Http\Requests\ProductRequest; 8 9class ProductController extends Controller 10{ 11 /** 12 * 商品一覧を表示する 13 * 14 * @return view 15 */ 16 public function showList() 17 { 18 $products = Product::all(); 19 return view('product.list', ['products' => $products]); 20 } 21 22 /** 23 * 商品詳細を表示する 24 * @param int $id 25 * @return view 26 */ 27 public function showDetail($id) 28 { 29 $product = Product::find($id); 30 31 if (is_null($product)) { 32 \Session::flash('err_msg', 'データがありません。'); 33 return redirect(route('products')); 34 } 35 return view('detail.detail', ['product' => $product]); 36 } 37 38 /** 39 * 商品登録画面を表示する 40 * 41 * @return view 42 */ 43 public function showCreate() 44 { 45 return view('create.create'); 46 } 47 48 /** 49 * 商品を登録する 50 * 51 * @return view 52 */ 53 public function exeStore(ProductRequest $request) 54 { 55 // 商品のデータを受け取る 56 $inputs = $request->all(); 57 dd($inputs); 58 59 \DB::beginTransaction(); 60 try { 61 // 商品を登録 62 Product::create($inputs); 63 \DB::commit(); 64 } catch(\Throwable $e) { 65 \DB::rollback(); 66 abort(500); 67 } 68 69 \Session::flash('err_msg', '商品を登録しました。'); 70 return redirect(route('products')); 71 } 72 73 /** 74 * 商品編集フォームを表示する 75 * @param int $id 76 * @return view 77 */ 78 public function showEdit($id) 79 { 80 $product = Product::find($id); 81 82 if (is_null($product)) { 83 \Session::flash('err_msg', 'データがありません。'); 84 return redirect(route('products')); 85 } 86 return view('edit.edit', ['product' => $product]); 87 } 88 89 /** 90 * 商品を更新する 91 * 92 * @return view 93 */ 94 public function exeUpdate(ProductRequest $request) 95 { 96 // 商品のデータを受け取る 97 $inputs = $request->all(); 98 99 \DB::beginTransaction(); 100 try { 101 // 商品を更新 102 $product = Product::find($inputs['id']); 103 104 $product->fill([ 105 'product_name' => $inputs['product_name'], 106 'price' => $inputs['price'], 107 'stock' => $inputs['stock'], 108 'comment' => $inputs['comment'] 109 ]); 110 $product->save(); 111 112 \DB::commit(); 113 } catch(\Throwable $e) { 114 \DB::rollback(); 115 abort(500); 116 } 117 118 \Session::flash('err_msg', '商品を更新しました。'); 119 return redirect(route('products')); 120 } 121 122 /** 123 * 商品を削除する 124 * @param int $id 125 * @return view 126 */ 127 public function exeDelete($id) 128 { 129 if (empty($id)) { 130 \Session::flash('err_msg', 'データがありません。'); 131 return redirect(route('products')); 132 } 133 134 try { 135 // 商品を削除 136 Product::destroy($id); 137 } catch(\Throwable $e) { 138 abort(500); 139 } 140 141 \Session::flash('err_msg', '商品を削除しました。'); 142 return redirect(route('products')); 143 } 144} 145
layout
1<!DOCTYPE HTML> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="csrf-token" content="{{ csrf_token() }}"> 6 <title>@yield('title')</title> 7 <link rel="stylesheet" href="/css/app.css"> 8 <script src="/js/app.js" defer></script> 9</head> 10<body> 11 <header> 12 @include('create.header') 13 </header> 14 <br> 15 <div class="container"> 16 @yield('create.content') 17 </div> 18 <footer class="footer bg-dark fixed-bottom"> 19 @include('product.footer') 20 </footer> 21</body> 22</html> 23
create
1 2@extends('create.layout') 3@section('title', '商品登録') 4@section('create.content') 5<div class="row"> 6 <div class="mb-5 col-md-6 col-md-offset-2"> 7 <h2>商品登録フォーム</h2> 8 <form method="POST" action="{{ route('store') }}" onSubmit="return checkSubmit()"> 9 @csrf 10 11 <div class="form-group"> 12 <label for="title"> 13 商品名 14 </label> 15 <input 16 id="product_name" 17 name="product_name" 18 class="form-control col-md-6" 19 value="{{ old('product_name') }}" 20 type="text" 21 > 22 @if ($errors->has('product_name')) 23 <div class="text-danger"> 24 {{ $errors->first('product_name') }} 25 </div> 26 @endif 27 </div> 28 29 <div class="form-group"> 30 <label for="company_name"> 31 メーカー 32 </label> 33 <br> 34 <select class="form-control col-md-3" name="company_name"> 35 <option value="1"></option> 36 <option value="2"></option> 37 </select> 38 @if ($errors->has('company_name')) 39 <div class="text-danger"> 40 {{ $errors->first('company_name') }} 41 </div> 42 @endif 43 </div> 44 45 <div class="form-group"> 46 <label for="price"> 47 価格 48 </label> 49 <input 50 id="price" 51 name="price" 52 class="form-control col-md-3" 53 value="{{ old('price') }}" 54 type="text" 55 > 56 @if ($errors->has('price')) 57 <div class="text-danger"> 58 {{ $errors->first('price') }} 59 </div> 60 @endif 61 </div> 62 63 <div class="form-group"> 64 <label for="stock"> 65 在庫数 66 </label> 67 <input 68 id="stock" 69 name="stock" 70 class="form-control col-md-3" 71 value="{{ old('stock') }}" 72 type="text" 73 > 74 @if ($errors->has('stock')) 75 <div class="text-danger"> 76 {{ $errors->first('stock') }} 77 </div> 78 @endif 79 </div> 80 81 <div class="form-group"> 82 <label for="comment"> 83 コメント 84 </label> 85 <textarea 86 id="comment" 87 name="comment" 88 class="form-control" 89 rows="4" 90 >{{ old('comment') }}</textarea> 91 @if ($errors->has('comment')) 92 <div class="text-danger"> 93 {{ $errors->first('comment') }} 94 </div> 95 @endif 96 </div> 97 98 <div class="form-group"> 99 <label for="image"> 100 商品画像 101 </label> 102 <br> 103 <input id="image" type="file" name="image"> 104 @if ($errors->has('image')) 105 <div class="text-danger"> 106 {{ $errors->first('image') }} 107 </div> 108 @endif 109 </div> 110 111 <div class="mt-5"> 112 <a class="btn btn-secondary" href="{{ route('products') }}"> 113 キャンセル 114 </a> 115 <button type="submit" class="btn btn-primary"> 116 登録する 117 </button> 118 </div> 119 </form> 120 </div> 121</div> 122<script> 123function checkSubmit(){ 124if(window.confirm('送信してよろしいですか?')){ 125 return true; 126} else { 127 return false; 128} 129} 130</script> 131@endsection 132
試したこと
適当な値を入力し、dd($inputs);で入力した値の取得ができていることは確認済みです。
補足情報(FW/ツールのバージョンなど)
Laravel5.8
PHP7.4.16
Windows
MAMP
VSCode
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。