質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

806閲覧

DBの更新方法を教えてください。

HirakuMorishima

総合スコア29

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/19 00:59

##現状・お願い
現在、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');

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

action="/updateItem/{{$list->id}}"のform内にclient_idがないからだと思います。
action="/deleteItem/{{$list->id}}"のformと同じくhiddenで置いておけば良いのではないでしょうか。

※いずれにしてもブラウザ「ソースを表示」から想定の場所に想定の値が入っているかは必ず確認してください。

投稿2019/06/19 04:00

編集2019/06/19 04:02
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HirakuMorishima

2019/06/19 10:13

ありがとうございます。 その通りです。
m.ts10806

2019/06/19 10:16

解決されたようでなによりです。 エラーから推測できることもあるので、必要な情報が確実に渡されているかどうかはデバッグしてくださいね
guest

0

client_idにnullを指定できないというエラーに見えるので
データバインドがうまくできていないのでは?

投稿2019/06/19 01:06

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HirakuMorishima

2019/06/19 01:18

ご返答ありがとうございます。 確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問