Laravelで生SQL書きたいときに使う「DBクラス」。
CRUDのCを実装したい場合、DBクラスのinsertメソッドを用いる方法があります。
使用方法や例についてお伝えします。
Contents
前提
DB接続設定ができていること
前提としてDB接続設定ができていることが必要。
接続設定がまだの場合、こちらを参照する。

【Laravel】DB接続方法【SQLite】Laravelでデータベースと接続する方法について勉強し直しました。
今回はSQLiteを対象にします。お手軽なので。
備忘...
本題
DBクラスのinsertメソッドを使う
CRUDのC(Create)を実装したい場合、DBクラスのinsertメソッドを用いる方法で実現できる。
書式
DB::insert(実行するSQL文);
一例
HelloController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class HelloController extends Controller { /** * [GET]ToDoの追加画面を表示する * */ public function add(Request $request) { return view('todo.add'); } /** * [POST]ToDoを追加する * */ public function create(Request $request) { $param = [ 'user_id' => $request->user_id, 'todo' => $request->todo, 'done' => false, ]; DB::insert('INSERT INTO todos (user_id, todo, done) values(:user_id, :todo, :done)', $param); return redirect('/todo/list'); } } |
resources\views\todo\add.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@extends('layouts.helloapp') @section('title', 'Add') @section('menubar') @parent 新規作成ページ @endsection @section('content') <table> <form action="/todo/add" method="post"> {{ csrf_field() }} <tr><th>user_id</th><td><input type="text" name="user_id"></td></tr> <tr><th>todo</th><td><input type="text" name="todo"></td></tr> <tr><th></th><td><input type="submit" name="send"></td></tr> </form> </table> @endsection @section('footer') copyright 2020 dice. @endsection |
resources\views\layouts\helloapp.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
<html> <head> <title>@yield('title')</title> <style> body { font-size: 16pt; color: #999; margin: 5px; } h1 { font-size: 50pt; text-align: right; color: #f6f6f6; margin: -20px 0px -30px 0px; letter-spacing: -4pt; } hr { margin: 25px; border-top: 1px dashed #ddd; } td { border: solid 1px #aaa; color: #999; padding: 5px 10px; } th { background-color: #999; color: fff; padding: 5px 10px; } ul { font-size: 12pt; } .menutitle { font-size: 14pt; font-weight: bold; margin: 0px; } .content { margin: 10px; } .footer { text-align: right; font-size: 10pt; margin: 10px; border-bottom: solid 1px #ccc; color: #ccc; } </style> </head> <body> <h1>@yield('title')</h1> @section('menubar') <h2 class="menutitle">※メニュー</h2> <ul> <li>@show</li> </ul> <hr size="1"> <div class="content"> @yield('content') </div> <div class="footer"> @yield('footer') </div> </body> </html> |
routes\web.php
1 2 |
Route::get('todo/add', 'ToDoController@add'); Route::post('todo/add', 'ToDoController@create'); |
動作確認
登録処理前
DB

登録画面
登録処理後
DB
(´-`).。oO(改修するマン帰っておいで)
.schema
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
sqlite> .schema CREATE TABLE IF NOT EXISTS 'people'( 'id' INTEGER PRIMARY KEY AUTOINCREMENT, 'name' TEXT NOT NULL, 'mail' TEXT, 'age' INTEGER ); CREATE TABLE sqlite_sequence(name,seq); CREATE TABLE IF NOT EXISTS 'users'( 'id' INTEGER PRIMARY KEY AUTOINCREMENT, 'password' TEXT NOT NULL, 'name' TEXT NOT NULL, 'administrator' BOOLEAN ); CREATE TABLE IF NOT EXISTS 'todos' ( 'id' INTEGER PRIMARY KEY AUTOINCREMENT, 'user_id' INTEGER, 'todo' TEXT, 'done' BOOLEAN, 'delete_at' Date, FOREIGN KEY (user_id) REFERENCES users(id) ); sqlite> |
参照
『Laravel入門』(掌田津耶乃)
Laravelを効率的に学習したい場合
スクールを活用するのも有効

Laravelを効率的に学習したい場合、スクールを活用するのも有効です。
転職を視野に入れている方、将来に向けて学習を進めている学生の方など、良かったら説明を聴いてみてはいかがでしょうか(説明会の参加は無料です)。
他のスクールについては下記の記事にまとめてあります。他のスクールについても視野に入れたい場合、参考になるかと思います。

【プログラミング】スクール一覧プログラミングのスクールで学ぶことを視野に入れた方向けに、ご紹介します。
転職を視野に入れたい
新卒で入社を視野に入れた...
ダイス
ご参考になれば幸いです、その旨を一言でも頂けると私が嬉しいです(モチベーションになります)。