Laravelでデータベースを使った投稿処理を実装してみる

以前投稿した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>

一覧ページは以下のように表示されました。

to-implement-a-post-processing-with-laravel01

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

to-implement-a-post-processing-with-laravel02

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

to-implement-a-post-processing-with-laravel03

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

to-implement-a-post-processing-with-laravel04

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

to-implement-a-post-processing-with-laravel05

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

to-implement-a-post-processing-with-laravel06

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

to-implement-a-post-processing-with-laravel07

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

to-implement-a-post-processing-with-laravel08

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

to-implement-a-post-processing-with-laravel09

 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930