Laravel9 | お問合せフォームの送信内容をデータベースに保存する

先日までに作成したお問合せフォームに送信内容をデータベースに保存する機能を追加します。

マイグレーション

マイグレーションファイル作成

sail artisan make:migration create_forms_table

上記のコマンドを実行すると “/database/migrations/2023_01_18_230933_create_forms_table.php” のようなファイルが作成されます。

upメソッド変更

マイグレーションファイル内のupメソッドでお問合せフォームの送信内容に対応したカラムを設定します。

public function up()
{
  Schema::create('forms', function (Blueprint $table) {
    $table->id();
    $table->string('company');
    $table->string('name');
    $table->string('name_kana');
    $table->string('phone');
    $table->string('email');
    $table->text('body');
    $table->timestamps();
  });
}

マイグレーション実行

sail artisan migrate

マイグレーションを実行すると初回実行の場合、以下のように今回作成したマイグレーションファイルとデフォルトで存在しているユーザーテーブル等のファイルも合わせて実行されます。

% sail artisan migrate

INFO  Running migrations.

2014_10_12_000000_create_users_table ...................... 105ms DONE
2014_10_12_100000_create_password_resets_table ............. 70ms DONE
2019_08_19_000000_create_failed_jobs_table ................. 47ms DONE
2019_12_14_000001_create_personal_access_tokens_table ...... 69ms DONE
2023_01_18_230933_create_forms_table ....................... 38ms DONE

ステータス確認(マイグレーションの履歴)

sail artisan migrate:status

上記コマンドでこれまでのマイグレーションの履歴を確認出来ます。

% sail artisan migrate:status

Migration name ......................................Batch / Status  
2014_10_12_000000_create_users_table .......................[1] Ran  
2014_10_12_100000_create_password_resets_table .............[1] Ran  
2019_08_19_000000_create_failed_jobs_table .................[1] Ran  
2019_12_14_000001_create_personal_access_tokens_table ......[1] Ran  
2023_01_18_230933_create_forms_table .......................[1] Ran  

ロールバック

sail artisan migrate:rollback

実行する必要はありませんが、上記コマンドで実行したマイグレーションをロールバック出来ます。

モデル作成

Formモデル作成

sail artisan make:model Form

上記コマンドで Formモデルを作成します。ファイルは “/app/Models/Form.php” に作成されます。

データベース保存機能を追加

FormControllerのsendMailメソッドにデータベースへ保存する機能を追加します。

use宣言でFormモデル追加

# /app/Http/Controllers/FormController.php

use App\Models\Form; 

保存機能を追加

Formモデルをインスタンス化してお問合せフォームから送信されたデータを追加してsaveメソッドで保存します。保存処理はメール送信処理の後に追加しました。

保存処理

# /app/Http/Controllers/FormController.php

// 送信内容をデータベースへ保存する
$form = new Form();
$form->company   = $form_data['company'];
$form->name      = $form_data['name'];
$form->name_kana = $form_data['name_kana'];
$form->phone     = $form_data['phone'];
$form->email     = $form_data['email'];
$form->body      = $form_data['body'];
$form->save();

保存処理追加後のsendMailメソッド

# /app/Http/Controllers/FormController.php

/**
 * メール送信
 */
public function sendMail(ContactFormRequest $request)
{
  // 
  $form_data = $request->validated();

  // submitボタンの値により分岐させる
  $submitBtnVal = $request->input('submitBtnVal');
  switch ( $submitBtnVal ) {
    case 'confirm':
        // 値を持たせた状態で確認画面へリダイレクト
        return to_route('form.confirm')->withInput();
        break;
    case 'back':
      // 値を持たせた状態で入力画面へリダイレクト
      return to_route('form')->withInput();
      break;
    case 'complete':
      // 送信先メールアドレス
      $email_admin = 'admin@example.com';
      $email_user  = $form_data['email'];

      // 管理者宛メール
      Mail::to($email_admin)->send( new FormAdminMail($form_data) );
      // ユーザー宛メール
      Mail::to($email_user)->send( new FormUserMail($form_data) );
      
      // ログ
      // Log::debug($form_data['name']. ' さまよりお問い合わせ');

      // 送信内容をデータベースへ保存する
      $form = new Form();
      $form->company   = $form_data['company'];
      $form->name      = $form_data['name'];
      $form->name_kana = $form_data['name_kana'];
      $form->phone     = $form_data['phone'];
      $form->email     = $form_data['email'];
      $form->body      = $form_data['body'];
      $form->save();

      // 
      return to_route('form.complete');
      break;
    default:
        // エラー
  }
    
}

動作環境情報

"macOS Ventura" 13.1
"Docker Desktop" 4.15.0
"Laravel Sail"
"Laravel Framework" 9.43.0

関連記事

コメント

タイトルとURLをコピーしました