フォームデータをデータベースに保存する(登録フォームを作る④)

前回の記事までで、フォームの内容をPOSTしてバリデーションするところまでを解説してきました。
今回は、いよいよPOSTされたデータをデータベースのテーブルに保存してみます。

まずは、保存先のテーブルをデータベースに作っておきましょう。

CREATE TABLE members (
    id serial PRIMARY KEY,
    name varchar(50) NOT NULL,
    age integer NOT NULL,
    registed_at timestamp NOT NULL
);

Laravelのコントローラでデータベースの操作を行うには、DBファサードを使います。
DBファサードを使えるようにするために、コントローラに次のuse文を追加します。すでに他のuse文が書かれているので、その下に追記します。

use Illuminate\Support\Facades\DB;

そして、コントローラのstoreメソッドに、DBファサードでSQL(insert文)を実行する処理を記述します。

    // 保存処理
    public function store(MemberRequest $request) {
        DB::insert('INSERT INTO members (name, age, registed_at) VALUES (?, ?, ?);', [
            $request->name,
            $request->age,
            date('Y-m-d H:i:s')
        ]);

        return 'stored';
    }

DBファサードのinsertメソッドを使うと、insert文を実行できます。
第1引数にはクエリ文字列を、第2引数にはクエリに結合する値の配列を渡します。
クエリ文字列の中に?が3つありますが、この?は第2引数で渡した配列の各要素の値に置き換わります。
つまり、実際には次のようなSQLが実行されることになります。

INSERT INTO members (name, age, registed_at) VALUES ('Lidia Scianna', 24, '2020-06-19 01:03:55');

この仕組みはバインドと言い、SQLインジェクションを防ぐ効果があります。

これで、フォームからPOSTされたデータをテーブルに挿入することができました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です