以前投稿した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に遷移後、削除して一覧ページにリダイレクトで戻ります。
【参考サイト】
コメントが承認されるまで時間がかかります。