フォーム処理とデータベースとの連携

Laravelを使ったウェブアプリケーション開発では、フォームを通じてデータを入力し、それをデータベースに保存することがよくあります。今回はフォーム処理とデータベースとの連携についてのメモです。

### 目次

1. フォームの作成
2. リクエストのバリデーション
3. データベースへの保存
4. 保存されたデータの表示

### 1. フォームの作成

まず、ユーザーからデータを入力してもらうためのフォームを作成します。例として、簡単なユーザー登録フォームを作成します。

`resources/views/user/create.blade.php`

```
<!DOCTYPE html>
<html>
<head>
    <title>User Registration</title>
</head>
<body>
    <h1>User Registration</h1>
    <form action="{{ url('user') }}" method="POST">
        @csrf
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <br>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email">
        <br>
        <button type="submit">Register</button>
    </form>
</body>
</html>
```

### 2. リクエストのバリデーション

フォームデータを受け取るために、ルートとコントローラーを設定します。バリデーションを使用して、入力されたデータが正しい形式であることを確認します。

`routes/web.php`

```php
Route::get('user/create', [UserController::class, 'create']);
Route::post('user', [UserController::class, 'store']);
```

`app/Http/Controllers/UserController.php`

```php
namespace App\Http\Controllers;

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

class UserController extends Controller
{
    public function create()
    {
        return view('user.create');
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users',
        ]);

        $user = User::create($validated);

        return redirect('user/'.$user->id);
    }
}
```

### 3. データベースへの保存

ユーザーデータをデータベースに保存するために、Eloquentモデルを使用します。まず、ユーザーテーブルを作成するためのマイグレーションを作成します。

### マイグレーションの作成

ターミナルで以下のコマンドを実行します。

```bash
php artisan make:migration create_users_table --create=users
```

`database/migrations/xxxx_xx_xx_create_users_table.php`

```php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}
```

次に、マイグレーションを実行してテーブルを作成します。

```bash
php artisan migrate
```

### モデルの作成

`app/Models/User.php`

```php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasFactory;

    protected $fillable = ['name', 'email'];
}
```

### 4. 保存されたデータの表示

最後に、保存されたユーザーデータを表示するためのビューを作成します。

`routes/web.php`

```php
Route::get('user/{id}', [UserController::class, 'show']);
```

`app/Http/Controllers/UserController.php`

```php
public function show($id)
{
    $user = User::findOrFail($id);
    return view('user.show', ['user' => $user]);
}
```

`resources/views/user/show.blade.php`

```
<!DOCTYPE html>
<html>
<head>
    <title>User Profile</title>
</head>
<body>
    <h1>User Profile</h1>
    <p>Name: {{ $user->name }}</p>
    <p>Email: {{ $user->email }}</p>
</body>
</html>
```

### まとめ

この記事は、Laravelでのフォーム処理とデータベースとの連携について記述しました。フォームからデータを受け取り、それをバリデーションし、データベースに保存する流れを理解することで、より複雑なアプリケーションの構築が可能になると思います。