前回までの様子はこちら。
ソースコードはこちら。
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関数に渡されます。
そして、その情報をデータベースに設定し、一覧画面にリダイレクトします。
これで更新処理が完成しました。
次回は削除処理を作りたいと思います。
↑よかったらクリックお願いします。




























