第28回 Laravelでデータの一覧表示、登録、変更、削除
公開日:2021-05-17 更新日:2021-05-17
1. 概要
Laravelでデータの一覧表示、登録、変更、削除をする方法について説明しています。
2. 動画
3. ルーティング
routes/web.php に以下を追加。
Route::resource('articles', 'App\Http\Controllers\ArticleController');
4. モデル
app/Models/Article.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
use HasFactory;
protected $fillable = ['title', 'body'];
}
5. コントローラー
app/Http/Controllers/ArticleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Article;
class ArticleController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$articles = Article::all();
return view("article.index", ['articles' => $articles]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view("article.create");
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$article = new Article($request->input('article'));
$article->save();
return redirect()->route('articles.index')->with('message', '作成しました。');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show(Article $article)
{
return view("article.show", [
'article' => $article,
]);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$article = Article::find($id);
return view("article.edit", [
'article' => $article,
]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$article = Article::find($id);
$article->fill($request->input('article'));
$article->save();
return redirect()->route('articles.index')->with('message', '更新しました。');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$article = Article::find($id);
$article->delete();
return redirect()->route('articles.index')->with('message', '削除しました。');
}
}
6. ビュー・登録画面
src/resources/views/article/create.blade.php
デザインに関する部分は省略してあります。
デザインに関する部分は省略してあります。
@extends('layouts.app')
@section('content')
<form action="{{ route('articles.store') }}" method="post">
@csrf
<input type="text" name="article[title]" /><br /><br />
<input type="text" name="article[body]" /><br /><br />
<input type="submit" class="btn btn-info text-white" value="登録" />
<a class="btn btn-info text-white ml-5" href="{{ route('articles.index') }}">一覧に戻る</a>
</form>
@endsection
7. ビュー・編集画面
src/resources/views/article/edit.blade.php
デザインに関する部分は省略してあります。
デザインに関する部分は省略してあります。
@extends('layouts.app')
@section('content')
<form action="{{ route('articles.update', [$article->id]) }}" method="post">
@csrf
@method('put')
<input type="text" name="article[title]" value="{{ $article->title }}" /><br /><br />
<input type="text" name="article[body]" value="{{ $article->body }}" /><br /><br />
<input type="submit" class="btn btn-info text-white" value="登録" />
<a class="btn btn-info text-white ml-5" href="{{ route('articles.index') }}">一覧に戻る</a>
</form>
@endsection
8. ビュー・一覧画面
src/resources/views/article/index.blade.php
デザインに関する部分は省略してあります。
デザインに関する部分は省略してあります。
@extends('layouts.app')
@section('content')
<ul>
@foreach ($articles as $article)
<li><a href="{{ route('articles.show',[ $article->id ]) }}">{{ $article->title }}</a></li>
@endforeach
</ul>
<a class="btn btn-info text-white" href="{{ route('articles.create') }}">追加</a>
@endsection
9. ビュー・詳細画面
src/resources/views/article/show.blade.php
デザインに関する部分は省略してあります。
デザインに関する部分は省略してあります。
@extends('layouts.app')
@section('content')
{{ $article->id }}:{{ $article->title }}<br />
<hr />
{{ $article->body }}<br />
<br />
<a class="btn btn-info text-white" href="{{ route('articles.edit', [$article->id]) }}">編集</a>
<form class="d-inline" action="{{ route('articles.destroy', [$article->id]) }}" method="post">
@csrf
@method('delete')
<input type="submit" class="btn btn-info text-white" value="削除" />
</form>
@endsection