フォームデータをデータベースに保存する(登録フォームを作る④)
前回の記事までで、フォームの内容を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されたデータをテーブルに挿入することができました。
