データベースの操作のまとめ(パート2)

モデルにfillableを記述する

app/Http/ModelsのBook.phpにアクセスし、下記のコードを追加します。

    protected $fillable = [
        "title",
        "author",
        "price",
    ];

コントローラーを作成する

次にコントローラーを作成します。以下のコマンドで、BookControllerを追加します。

php artisan make:controller BookController

次に各メソッドを追加します。今回は一度にすべてのメソッドを追加します。BookControllerは以下のようになります。

<?php

namespace App\Http\Controllers;

use App\Models\Book;
use Illuminate\Http\Request;

class BookController extends Controller
{
    public function showBooks() {
        $books = Book::all();
        return view("show-books", compact("books"));
    }

    public function showDetailBook(Book $book) {
        return view("show-detail-book", compact("book"));
    }

    public function createBook() {
        return view("create-book");
    }

    public function storeBook(Request $request) {
        Book::create([
            "title" => $request->input("title"),
            "author" => $request->input("author"),
            "price" => $request->input("price"),
        ]);
        return redirect(route("books.show"));
    }

    public function editBook(Book $book) {
        return view("edit-book", compact("book"));
    }

    public function updateBook(Request $request, Book $book) {
        $book->update([
            "title" => $request->input("title"),
            "author" => $request->input("author"),
            "price" => $request->input("price"),
        ]);
        return redirect(route("books.show"));
    }

    public function destroyBook(Request $request, Book $book) {
        $book->delete();
        return redirect(route("books.show"));
    }
}

各メソッドとその役割は以下の通りです。

メソッド名役割
showBookbooksテーブルの一覧を取得
show-booksビューではすべてのbookのidとtitleを表示
showDetailBookbookの詳細を表示
show-detail-bookビューでは指定されたbookのidとtitle、author、priceを表示
createBookcreate-bookビューを表示
storeBookbooksテーブルに新しいデータを追加
editBookedit-bookビューを表示
updateBook指定したbooksテーブルの要素を更新
destroyBook指定したbooksテーブルの要素を削除

以上で、データの表示、作成、更新、削除のコントローラーを実装できました。

今回はデータベースの表示、作成、更新、削除のためのコントローラーを一通り実装しました。次回以降では、各ビューの作成やルーティングを行っていきます。

コメントを残す

CAPTCHA