前回までの様子はこちら。
ソースコードはこちら。
https://github.com/takishita2nd/hotel-mng
今回は登録した内容を更新するところまでやります。
データを更新する前に、データを更新するページにリンクするように一覧画面を修正します。
@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading">予約一覧</div> <div class="panel-body"> <table> <tr> <th>名前</th> <th>住所</th> <th>電話番号</th> <th>人数</th> <th>宿泊日</th> <th>宿泊日数</th> <th>編集</th> <th>削除</th> </tr> @foreach ($registerLists as $list) <tr> <td>{{ $list->name }}</td> <td>{{ $list->address }}</td> <td>{{ $list->phone }}</td> <td>{{ $list->num }}</td> <td>{{ $list->days }}</td> <td>{{ $list->start_day }}</td> <td>{{ Html::link('/management/'.$list->id.'/edit', '編集') }}</td> <td>削除</td> </tr> @endforeach </table> </div> </div> </div> </div> </div> @endsection
そして、ルーティングの設定も追加します。
Route::get('/management/{id}/edit', 'RegisterManagementController@edit'); Route::post('/management/update', 'RegisterManagementController@update');
更新フォームへのリンクと、実際にデータを更新するリクエストですね。
コントローラーには、以下の関数を追加します。
/** * 編集処理 */ public function edit($id) { return view('register.edit', ['item' => $this->registerManagement->getItemById($id)]); } /** * 更新処理 */ public function update(Request $request) { $param = $this->registerManagement->getParam(); $this->registerManagement->updateById($request->id, [ $param[0] => $request->name, $param[1] => $request->address, $param[2] => $request->phone, $param[3] => $request->num, $param[4] => $request->days, $param[5] => $request->start_day ]); return redirect('management'); }
そして、リポジトリには以下の関数を追加。
// IDから予約を1件取得する public function getItemById($id) { return ReserveManagement::where(['id' => $id])->first(); } // 予約を更新する public function updateById($id, $param) { $model = $this->getItemById($id); foreach($this->paramNames as $name) { $model->$name = $param[$name]; } $model->save(); }
「編集」のリンクのURLにデータベースのID番号が入っていて、それをコントローラーで受け取り、データベースからIDで参照して、データを取得します。
そして、取得したデータをViewに渡します。
実際に編集画面のViewはこちら。
@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading">予約登録</div> <div class="panel-body"> {!! Form::open(['url' => action('RegisterManagementController@update')]) !!} {!! Form::hidden('id', $item->id) !!} <table> <tr> <td>名前</td> <td>{!! Form::text('name', $item->name) !!}</td> </tr> <tr> <td>住所</td> <td>{!! Form::text('address', $item->address) !!}</td> </tr> <tr> <td>電話番号</td> <td>{!! Form::number('phone', $item->phone) !!}</td> </tr> <tr> <td>人数</td> <td>{!! Form::select('num', ['1' => 1, '2' => 2], $item->num) !!}</td> </tr> <tr> <td>宿泊日数</td> <td>{!! Form::select('days', ['1' => 1, '2' => 2, '3' => 3, '4' => 4], $item->days) !!}</td> </tr> <tr> <td>宿泊日</td> <td>{!! Form::date('start_day', $item->start_day) !!}</td> </tr> </table> {!! Form::submit('登録') !!} {!! Form::close() !!} </div> </div> </div> </div> </div> @endsection
見た目は登録と同じですが、デフォルト値を設定しているのが異なります。
コントローラーから受け取った値をデフォルト値として設定しています。
そして、登録ボタンを押すと、その情報がコントローラーのupdate関数に渡されます。
そして、その情報をデータベースに設定し、一覧画面にリダイレクトします。
これで更新処理が完成しました。
次回は削除処理を作りたいと思います。
↑よかったらクリックお願いします。