以前投稿したLaravelでデータベースに接続してみるの続きで、データベースにデータの登録や編集ができるようにしてみます。
サンプルコード
今回は以下のようなページを作成してみます。
- 一覧ページ(/sample)
- 詳細ページ(/sample/detail/[id])
- 追加ページ(/sample/add)
- 編集ページ(/sample/edit/[id])
- 削除(/sample/delete/[id])
[id]には該当のレコードのidが入る想定です。
削除はURLにアクセスした段階でデータを削除するので、特にビューは作成しません。
まずはルーティングを設定します。
app\Http\routes.php
// 一覧
Route::get('/sample', 'SamplesController@getIndex');
// 詳細
Route::get('/sample/detail/{id}', 'SamplesController@getDetail');
// 追加
Route::get('/sample/add', 'SamplesController@getAdd');
Route::post('/sample/add', 'SamplesController@postAdd');
// 編集
Route::get('/sample/edit/{id}', 'SamplesController@getEdit');
Route::post('/sample/edit/{id}', 'SamplesController@postEdit');
// 削除
Route::get('/sample/delete/{id}', 'SamplesController@getDelete');
コントローラーに処理を追加します。
app\Http\Controllers\SamplesController.php
<?php
namespace App\Http\Controllers;
use App\Sample;
use Request;
class SamplesController extends Controller
{
protected $sample;
public function __construct(Sample $sample)
{
$this->sample = $sample;
}
// 一覧
public function getIndex()
{
$samples = $this->sample->all();
return view('sample.index', compact('samples'));
}
// 詳細
public function getDetail($id)
{
$sample = $this->sample->find($id);
return view('sample.detail', compact('sample'));
}
// 追加
public function getAdd()
{
return view('sample.add');
}
public function postAdd()
{
$data = Request::all();
$this->sample->fill($data);
$this->sample->save();
return redirect()->to('sample');
}
// 編集
public function getEdit($id)
{
$sample = $this->sample->find($id);
return view('sample.edit', compact('sample'));
}
public function postEdit($id)
{
$sample = $this->sample->find($id);
$data = Request::all();
$sample->fill($data);
$sample->save();
return redirect()->to('sample');
}
// 削除
public function getDelete($id)
{
$sample = $this->sample->find($id);
$sample->delete();
return redirect()->to('sample');
}
}
一覧ページのビューを以下に書き換えます。
resources\views\sample\index.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
<div><a href="/sample/add">追加</a></div>
@foreach($samples as $sample)
<div>
<div>{{{ $sample->id }}}</div>
<div>{{{ $sample->title }}}</div>
<div>{{{ $sample->body }}}</div>
<div>{{{ $sample->username }}}</div>
<div>{{{ $sample->created_at }}}</div>
<div>{{{ $sample->updated_at }}}</div>
<div><a href="/sample/detail/{{{ $sample->id }}}">詳細</a> | <a href="/sample/edit/{{{ $sample->id }}}">編集</a> | <a href="/sample/delete/{{{ $sample->id }}}">削除</a></div>
</div>
<hr>
@endforeach
</body>
</html>
詳細ページのビューを追加します。
resources\views\sample\detail.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
<div>
<div>{{{ $sample->id }}}</div>
<div>{{{ $sample->title }}}</div>
<div>{{{ $sample->body }}}</div>
<div>{{{ $sample->username }}}</div>
<div>{{{ $sample->created_at }}}</div>
<div>{{{ $sample->updated_at }}}</div>
</div>
</body>
</html>
追加ページのビューを追加します。
resources\views\sample\add.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
{!! Form::open() !!}
<div>
タイトル:{!! Form::text('title', null) !!}
</div>
<div>
本文:{!! Form::text('body', null) !!}
</div>
<div>
ユーザー名:{!! Form::text('username', null) !!}
</div>
<div>
{!! Form::submit('登録') !!}
</div>
{!! Form::close() !!}
</body>
</html>
編集ページのビューを追加します。
resources\views\sample\edit.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
{!! Form::open() !!}
<div>
タイトル:{!! Form::text('title', $sample->title) !!}
</div>
<div>
本文:{!! Form::text('body', $sample->body) !!}
</div>
<div>
ユーザー名:{!! Form::text('username', $sample->username) !!}
</div>
<div>
{!! Form::submit('編集') !!}
</div>
{!! Form::close() !!}
</body>
</html>
一覧ページは以下のように表示されました。

詳細ページではURLで指定したidのレコードが表示されます。

追加ページではタイトル、本文、ユーザー名を入力します。
id、created_at、updated_atは登録時に自動で付与されます。

以下のように入力して登録します。

一覧ページで登録内容が反映されているのが確認できました。

編集ページでは現在のデータがinputに入った状態で表示されます。

以下のように書き換えます。

変更内容とupdated_atが変更されているのが確認できました。

削除をクリックすると、URLに遷移後、削除して一覧ページにリダイレクトで戻ります。

【参考サイト】
コメントが承認されるまで時間がかかります。