【Laravel】簡単アプリ作製【2】 データベース接続とカテゴリ追加

Laravel

環境構築後のステップとして、MySQLデータベースとの連携から、マイグレーションとモデルを使用したカテゴリ追加機能の実装までの手順。

1. データベースの作成と接続設定

Step 1: XAMPPでデータベース(MySQL)の作成

1.XAMPP Control Panelを開き、MySQL の「Admin」ボタンをクリックして起動する。

2.ブラウザで http://localhost/phpmyadmin/ が開くので「新規作成」をクリック。

3.データベース名(例: laravel_db)を入力し、照合順序を utf8mb4_general_ci に設定して「作成」をクリック。

Step 2: .env ファイルの編集(接続設定)

VSCodeでプロジェクトを開き、ルート直下にある .env ファイルを書き換えてLaravelとデータベースを接続する。

Plaintext
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db    # 作成したデータベース名
DB_USERNAME=root          # XAMPPのデフォルト
DB_PASSWORD=              # XAMPPのデフォルトは空欄

2. カテゴリ機能の作成(マイグレーションとモデル)

データベースにカテゴリを保存するためのテーブルと、プログラム側で制御するためのモデル・コントローラーを一括生成する。

Step 1: Artisanコマンドの実行

PowerShell
PS C:\xampp\htdocs\laravel-app> php artisan make:model Category -mc
  • -m: マイグレーションファイル(テーブル定義)を同時作成
  • -c: コントローラー(処理担当)を同時作成

Step 2: テーブル定義(マイグレーションファイルの編集)

database/migrations/xxxx_xx_xx_xxxxxx_create_categories_table.php を開き、カテゴリ名用のカラムを追加する。

Plaintext
public function up(): void
{
    Schema::create('categories', function (Blueprint $table) {
        $table->id();
        $table->string('name');               // 追加:カテゴリ名
        $table->text('description');          // 追加:カテゴリの説明文
        $table->string('major_category_name');// 追加:カテゴリの大分類	
        $table->timestamps();
    });
}

Step 3: モデルの編集

一括挿入(Mass Assignment)を許可するカラムを指定する。HasFactory トレイトを使用するためのインポート文も省略せず記述して保存する。
app/Models/Category.php

PHP
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory; // 自動生成されているか要確認
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use HasFactory;

    // 追加:保存を許可するカラムを指定
    protected $fillable = [
        'name',
        'description',
        'major_category_name',
    ];
}

Step 4: マイグレーションの実行

編集後、ターミナルで以下のコマンドを実行してデータベースにテーブルを反映させる。

PowerShell
PS C:\xampp\htdocs\laravel-app> php artisan migrate

3. シーダーによるダミーデータの追加とキャッシュクリア

Step 1: シーダークラスの生成

PowerShell
PS C:\xampp\htdocs\laravel-app> php artisan make:seeder CategorySeeder

Step 2: シーダーのデータ定義

database/seeders/CategorySeeder.php

PHP
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Category; // ★追加:モデルのインポート

class CategorySeeder extends Seeder
{
    public function run(): void
    {
        Category::truncate(); // 追加:既存データを一度クリア

        // 追加:ダミーデータの挿入
        Category::create([
            'name' => '',
            'description' => 'ビジネス書、小説、マンガなどを含みます。',
            'major_category_name' => 'エンタメ',
        ]);

        Category::create([
            'name' => 'パソコン',
            'description' => 'ノートPC、デスクトップPC、周辺機器など。',
            'major_category_name' => '家電・IT',
        ]);
    }
}

Step 3: DatabaseSeederへの登録

database/seeders/DatabaseSeeder.php

PHP
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Database\Seeders\CategorySeeder; // ★追加:シーダーのインポート

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        // 追加:作成したシーダーを呼び出す
        $this->call([
            CategorySeeder::class,
        ]);
    }
}

Step 4: クラスマップの更新と実行

新設したシーダークラスをLaravelに認識させるため、実行前に必ずオートロードを再生成する。

PowerShell
PS C:\xampp\htdocs\laravel-app> composer dump-autoload

完了後、テーブル再生成とデータ投入を実行。

PowerShell
PS C:\xampp\htdocs\laravel-app> php artisan migrate:fresh --seed

4. カテゴリ追加処理(Webフォーム)の実装

Step 1: ルーティングの設定

routes/web.php

PHP
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CategoryController; // ★追加:コントローラーのインポート

// 追加:カテゴリ機能のルーティング
Route::get('/categories/create', [CategoryController::class, 'create'])->name('categories.create');
Route::post('/categories', [CategoryController::class, 'store'])->name('categories.store');

Step 2: コントローラーの編集

app/Http/Controllers/CategoryController.php

PHP
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Category; // ★追加:モデルのインポート

class CategoryController extends Controller
{
    // 追加:登録画面の表示
    public function create()
    {
        return view('categories.create');
    }

    // 追加:データの保存処理
    public function store(Request $request)
    {
        // 入力チェック
        $request->validate([
            'name' => 'required|max:50',
            'description' => 'required',
            'major_category_name' => 'required|max:50',
        ]);

        // データベースへ保存
        Category::create([
            'name' => $request->name,
            'description' => $request->description,
            'major_category_name' => $request->major_category_name,
        ]);

        return redirect()->back()->with('success', 'カテゴリを追加しました。');
    }
}

Step 3: ビュー(画面)の作成

  1. resources/views の中に categories フォルダを新規作成 する。
  2. 作成したフォルダの中に create.blade.php ファイルを新規作成 する。
  3. 作成した create.blade.php に、新しく拡張したカラム(大分類名・カテゴリ名・説明文)に対応した以下のHTMLコードを記述して保存する。
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>カテゴリ追加</title>
</head>
<body>
    <h1>カテゴリ新規追加</h1>

    <!-- セッションメッセージ(登録完了)の表示 -->
    @if (session('success'))
        <p style="color: green;">{{ session('success') }}</p>
    @endif

    <!-- エラーメッセージの一括表示 -->
    @if ($errors->any())
        <ul style="color: red;">
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    @endif

    <!-- カテゴリ入力フォーム -->
    <form action="{{ route('categories.store') }}" method="POST">
        @csrf <!-- Laravel必須のCSRFセキュリティトークン -->
        
        <div>
            <label for="major_category_name">大分類名:</label>
            <input type="text" name="major_category_name" id="major_category_name" value="{{ old('major_category_name') }}">
        </div>
        <br>
        <div>
            <label for="name">カテゴリ名:</label>
            <input type="text" name="name" id="name" value="{{ old('name') }}">
        </div>
        <br>
        <div>
            <label for="description">説明文:</label>
            <textarea name="description" id="description">{{ old('description') }}</textarea>
        </div>
        <br>
        <button type="submit">追加する</button>
    </form>
</body>
</html>

5. 動作確認(XAMPP環境)

1.XAMPP Control Panelで ApacheMySQL が緑色に点灯しているか確認。

2.http://localhost/phpmyadmin/ で、categories テーブルにシーダーの初期データが入っているか確認。

3.ブラウザを開き、XAMPPの公開ディレクトリURLへ直接アクセスする。 http://localhost/laravel-app/public/categories/create

4.フォームからカテゴリを入力・追加し、エラーなくデータベースへ反映されれば完了。

※この記事はAIで生成後、実際に手順通り実施して加筆、修正しています。

コメント