先日までに作成したお問合せフォームに送信内容をデータベースに保存する機能を追加します。
マイグレーション
マイグレーションファイル作成
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
コメント