##現状・お願い
現在、laravelを使ってDBへのデータ登録・更新機能を作成しています。
データ登録はできるのですが、その後の更新ができません。
更新をするためにはどのようなコードが必要でしょうか。お教えくださいませ。
##エラーメッセージ
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'client_id' cannot be null (SQL: update items
set client_id
= ?, states
= ?, items
.updated_at
= 2019-06-19 00:47:33 where id
= 9)
##試したこと
データが受け渡しされていないことが問題かと思われたため、input type="hidden"を使用して、エラーメッセージ内で?表示となっているclient_idとstatesのvalueをformの中に埋め込み、送信しました。
###editItem.blade.php
php
1@extends('layouts.layout') 2@section('title','案件管理画面') 3 4@section('body') 5 <!--サイドメニューここから--> 6 <div class="row"> 7 <div class="col s0 l2"> 8 <ul id="slide-out" class="sidenav sidenav-fixed "> 9 <li><a href="{{url('/user')}}">クライアント一覧<i class="material-icons left">person</i></a></li> 10 <li><a href="#">案件カレンダー<i class="material-icons left">date_range</i></a></li> 11 <li><a href="{{url('/addClient')}}">クライアント追加<i class="material-icons left">add</i></a></li> 12 <li><a href="{{url('addItem')}}">案件追加<i class="material-icons left">add</i></a></li> 13 </ul> 14 </div> 15 <!--サイドメニューここまで--> 16 <div class="col s12 offset-l1 l8"> 17 <nav class="header"> 18 <a href="#" data-target="slide-out" class="sidenav-trigger btn-floating"><i class="medium z-depth-1 material-icons">add</i></a> 19 <h2 class="center-align">案件管理画面</h2> 20 </nav> 21 <form action="/updateItem/{{$list->id}}" method="POST"> 22 {{ csrf_field() }} 23 <div class="input-field col s12"> 24 <input id="item_name" type="text" class="validate" name="item_name" value="{{$list->item_name}}"> 25 <label for="item_name">案件名</label> 26 </div> 27 <div class="input-field col s12"> 28 <input id="delivery_date" type="text" class="datepicker" name="delivery_date" value="{{$list->delivery_date}}"> 29 <label for="delivery_date">納期</label> 30 </div> 31 <div class="input-field col s12"> 32 <input id="unit_price" type="text" class="validate" name="unit_price" value="{{$list->unit_price}}"> 33 <label for="unit_price">単価</label> 34 </div> 35 <div class="input-field col s12"> 36 <input id="memo" type="text" class="validate" name="memo" value="{{$list->memo}}"> 37 <label for="memo">備考欄</label> 38 </div> 39 <input type="submit" value="案件編集" class="waves-effect waves-light btn blue accent-1"> 40 </form> 41 <form method="POST" action="/deleteItem/{{$list->id}}" method="post"> 42 {{ method_field('delete') }} 43 {{csrf_field()}} 44 <input type="submit" value="案件情報削除" class="waves-effect waves-light btn red lighten-1"> 45 <input type="hidden" name="client_id" value="{{$list->client_id}}" > 46 <input type="hidden" name="states" value="{{$list->states}}" > 47 </form> 48 </div> 49 </div> 50 51@endsection
###TodoController(一部抜粋)
php
1 // 案件情報の追加・更新・削除 2 public function addNewItem(Request $request){ 3 $item = new Item(); 4 $item->user_id = Auth::user()->id; 5 $item->client_id = $request->client_id; 6 $item->item_name = $request->item_name; 7 $item->delivery_date = $request->delivery_date; 8 $item->unit_price = $request->unit_price; 9 $item->states = $request->states; 10 $item->memo = $request->memo; 11 $item->save(); 12 13 return redirect('/addItem'); 14 } 15 public function editItem($id){ 16 $list = Item::find($id); 17 return view('todo.editItem', compact('list')); 18 } 19 public function updateItem(Request $request){ 20 $item = Item::where('id', '=', $request->id)->first(); 21 $item->user_id = Auth::user()->id; 22 $item->client_id = $request->client_id; 23 $item->item_name = $request->item_name; 24 $item->delivery_date = $request->delivery_date; 25 $item->unit_price = $request->unit_price; 26 $item->states = $request->states; 27 $item->memo = $request->memo; 28 $item->save(); 29 30 return redirect('/user'); 31 } 32 public function deleteItem(Request $request) 33 { 34 $client = Item::where('id', '=', $request->id)->first(); 35 $client->delete(); 36 37 return redirect()->back(); 38 } 39}
###web.php
php
1Route::get('/', 'PageController@index'); 2Route::get('/user', 'UserController@user'); 3Route::get('/addClient', 'TodoController@addClient'); 4Route::get('/addItem', 'TodoController@addItem'); 5Route::get('/editItem', 'TodoController@editItem'); 6Route::get('/items/{id}', 'TodoController@items'); 7Route::get('/invoice', 'InvoiceController@invoice'); 8Route::get('/editUser', 'InvoiceController@editUser'); 9Auth::routes(); 10Route::get('/home', 'HomeController@index')->name('home'); 11 12// クライアント情報の追加・更新・削除 13Route::post('/addNewClient','TodoController@addNewClient'); 14Route::get('/editClient/{id}', 'TodoController@editClient'); 15Route::post('/updateClient/{id}','TodoController@updateClient'); 16Route::delete('/deleteClient/{id}','TodoController@deleteClient'); 17 18// 案件情報の追加・更新・削除 19Route::post('addNewItem','TodoController@addNewItem'); 20Route::get('/editItem/{id}', 'TodoController@editItem'); 21Route::post('/updateItem/{id}','TodoController@updateItem'); 22Route::delete('/deleteItem/{id}','TodoController@deleteItem');
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/19 10:13
2019/06/19 10:16