本の管理アプリの全体の概要
1.まずは要件をまとめる。
依頼者がいる場合は、依頼者と要件を詰める。
個人開発の場合は、メモアプリとかを使って要件をまとめる。
今回は下記の内容でテーブルを作成していきます。(動画で解説してます)
本のアプリテーブル設計
Bookテーブルの設定
今回は、ide上(phpstorm)で設計をしています。
最終的な作成イメージは個人開発用のため仕様は後々リファクタリングしていく形で行います。
ですので、とりあえず最低限の情報をまず作成していって、後でカラム追加などで対応してく流れにしてます。
/**
* id: 一意(autoincrement)、null✗、同じ値✗
* name: length 255, not null(必ず値を入れる
* status: tinyInteger(1〜255), not null, 1:読書中、2:未読、3:読破、4:読みたい
* author: 著者 length 255、null許可
* publication: 出版、 length 255, null許可
* read_at: 読み終わった日、date(日付 yyyy-mm-dd)、null許可
* note: メモ(備考) text、null許可
* timestamps(updated_at、created_at)
*
* 出来たらTRYする
* cover_image:本の画像
*
*/
Bookモデルの作成
モデルの作成は、artisanコマンドで実行します。
モデルの作成は、artisanコマンドを使わずとも、Modelsディレクトリのファイルをコピーするだけでも利用できます。
また、Laravel sailを利用している場合はsail php artisanと続けますが、特に利用していない場合はphp artisan という形で利用ください。
// Larave sailを利用している場合
sail php artisan make:model Book
// Larave sailを利用していない場合
php artisan make:model Book
本のアプリのマイグレーション
migrationファイルの作成
migrationファイルの作成は、artisanコマンドで実行します。
create_books_tableの箇所がmigrationファイル名です。
そして、booksの箇所がテーブル名としてmigrationファイルが作成されます。
sail php artisan make:migration create_books_table
migrationの実行
migrationの実行もartisanコマンドで行います。
単純にmigrationを実行したければ、migrateといった形でコマンド実行します。
// Laravel sailを利用している場合
sail php artisan migrate
// Laravel sailを利用していない場合
php artisan migrate
MySQLのテーブルコメントの確認方法
テーブルにコメントを追加した場合は、下記コマンドでテーブルコメントを確認出来ます。
下記のサンプルでは、booksテーブルのテーブルコメントを確認しています。
SQL> show full columns from books;
テーブル構造を確認する方法
テーブル構造を確認するには、descコマンドを利用します。
こちらは、Laravelのコマンドではなく、SQLコマンドになります。MySQLやその他のデータベースでも同様に利用できます。
こちらのサンプルの場合は、booksというテーブルの構造を確認出来ます。
SQL> desc books;
本の管理アプリのルート、コントローラー、ビューの作成方法について
本の管理アプリを作成するための最低限のルート、コントローラー、ビューの説明になります。
ルーティング(web.php)
ルーティングは、どのURLでアクセスした場合に、どのアクションを実行するか?という設定を行います。
- 1行目のuseは、BookControllerのパスを指定してます。
この記載がないと、BookControllerがどこの場所にあるか、Laravelは知ることが出来ないので、「BookController not found」などのエラーが出てしまいます。 - middleware([‘auth’])に関しては、authという認証用のミドルウェアを利用していることを意味しています。
この設定をしている場合は、通常ログインしているユーザのみが、{}で囲ってある範囲の処理、つまりURL「/」のアクションが実行出来ます。 - prefix(‘book’)に関しては、例えば(https://imanaka.meがドメインの場合は、「https://imanaka.me/book」配下のを指定している事になります。
ですので、URL「/」というのは、「https://imanaka.me/book」を指します。URL「/create」の場合は、「https://imanaka.me/book/create」を指します。 - group(function() {});に関しては、上記で説明した内容が、その{}の中で全て有効ですよっていうグルーピングの設定になります。
- Route::getに関しては、GETのHTTPリクエスト(通常ページ表示時など)の際に動作するという設定です。
- BookController::classは、BookControllerを利用して、indexメソッドを呼び出すという設定です。
- name(‘book’)というのは、このルーティングに対してbookというルート名をつけています。ルート名をつけると、bookという名前でこのルーティング設定を呼び出せます。
use App\\Http\\Controllers\\BookController;
Route::middleware(['auth'])->prefix('book')->group(function () {
Route::get('/', [BookController::class, 'index'])->name('book');
});
・コントローラー(BookController.php)
<?php
namespace App\Http\Controllers;
use App\Models\Book;
use Illuminate\Http\Request;
class BookController extends Controller
{
public function index()
{
$books = Book::all();
return view('book.index', ['books' => $books]);
}
}
・ビュー(book/index.blade.php)
book.blade.php
{{ $books }}
テストデータの作成
・model factoryの作成
sail php artisan make:factory BookFactory
・BookFactory.php
下記を追加する。
return [
'name' => $this->faker->name(),
'status' => $this->faker->randomElement([1,2,3,4]),
'author' => $this->faker->name(),
'publication' => $this->faker->name(),
'read_at' => $this->faker->date(),
'note' => $this->faker->realText(),
];
・laravel tinkerでfakerを利用する
sail tinker
$faker = app()->make(Faker\Generator::class)
$faker->name()
$faker->randomElement([1,2,3,4])
$faker->date()
$faker->realText()
-- 日本語化
$fakerJP = Faker::create('ja_JP');
-- fakerを利用したデータ作成
\App\Models\Book::factory(10)->create();
※期間限定クーポンコード適用中です。