laravel12.laravel_013
最終投稿日:2025年9月12日
public function index(Request $request) {
$users = DB::select('select * from users where name = ?', ['hoge_user']);
var_dump($users);exit; // ダンプする
return view('hoge/index', []);
}
public function index(Request $request) {
DB::insert('insert into users (name, email, password) values (?, ?, ?)', ['hoge_user', '[email protected]', '9999']);
$users = DB::select('select * from users where name = ?', ['hoge_user']);
var_dump($users);exit; // ダンプする
return view('hoge/index', []);
}
public function index(Request $request) {
DB::update("update users set password = '8888' where id = ?", [1]);
$users = DB::select('select * from users where name = ?', ['hoge_user']);
var_dump($users);exit; // ダンプする
return view('hoge/index', []);
}
public function index(Request $request) {
DB::delete('delete from users where id = ?', [1]);
$users = DB::select('select * from users where name = ?', ['hoge_user']);
var_dump($users);exit; // ダンプする
return view('hoge/index', []);
}
public function index(Request $request) {
$users = DB::table('users')->get();
var_dump($users);exit;
return view('hoge/index', []);
}
public function index(Request $request) {
users = DB::table('users')->where('name', 'hoge_user')->orderBy('created_at', 'desc')->get();
var_dump($users);exit;
return view('hoge/index', []);
}
public function index(Request $request) {
$users = DB::table('users')->where('id', 1)->first();
var_dump($users);exit;
return view('hoge/index', []);
}
public function index(Request $request) {
DB::table('users')->insert([
'name' => 'hoge_user',
'email' => '[email protected]',
'password' => '9999',
]);
$users = DB::table('users')->get();
var_dump($users);exit; // ダンプ
return view('hoge/index', []);
}
DBへ登録した場合は、登録したIDを確認したい場合があると思います。
その場合はメソッド「insert」を「insertGetId」へ変更する事で返却値で《ID》を取得できます。
public function index(Request $request) {
DB::table('users')->where('id', 2)->update(['password' => '8888']);
$users = DB::table('users')->get();
var_dump($users);exit; // ダンプ
return view('hoge/index', []);
}
public function index(Request $request) {
DB::table('users')->where('id', 2)->delete();
$users = DB::table('users')->get();
var_dump($users);exit; // ダンプ
return view('hoge/index', []);
}
public function index(Request $request) {
try {
DB::transaction(function () {
DB::table('users')->insert([
'name' => 'hoge_user',
'email' => '[email protected]'
'password' => '5555',
]);
});
} catch (\Illuminate\Database\QueryException $e) {
var_dump($e->getMessage());exit; // ダンプ
}
return view('hoge/index', []);
}
public function index(Request $request) {
DB::beginTransaction();
try {
DB::insert('insert into users (name, email) values (?, ?)', [
'hoge_user',
'[email protected]'
'password' => '5555',
]);
DB::commit();
} catch (\Illuminate\Database\QueryException $e) {
DB::rollback();
var_dump($e->getMessage());exit; // ダンプ
}
return view('hoge/index', []);
}
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider {
public function register(): void {
//
}
public function boot(): void {
//
}
}
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider {
public function register(): void {
//
}
public function boot(): void {
// 日時自動登録テーブル一覧
$autoTables = ['users'];
// 独自更新メソッド(myInsert)をオーバーライド
Builder::macro('myInsert', function (array $values) use($autoTables) {
$table = app('current_table');
if (in_array($table, $autoTables)) {
$values['created_at'] = now();
}
return $this->insert($values);
});
// 独自更新メソッド(myInsertGetId)をオーバーライド
Builder::macro('myInsertGetId', function (array $values) use($autoTables) {
$table = app('current_table');
if (in_array($table, $autoTables)) {
$values['created_at'] = now();
}
return $this->insertGetId($values);
});
// 独自更新メソッド(myUpdate)をオーバーライド
Builder::macro('myUpdate', function (array $values) use($autoTables) {
$table = app('current_table');
if (in_array($table, $autoTables)) {
$values['updated_at'] = now();
}
return $this->update($values);
});
// テーブル名取得
DB::macro('table', function ($table, $callback = null) {
// テーブル名を取得・記録
app()->instance('current_table', $table);
if ($callback) {
return $this->connection()->table($table)->pipe($callback);
}
return $this->connection()->table($table);
});
}
}
日時に限らず、「日」「時刻」を分けたカラムを作成しても良いと思います。
またセッション値も取得可能ですので、登録/更新ユーザーカラムを作成しても良いかもしれません。
<?php
namespace App\Models;
use Exception;
use DB;
class Dao {
// 自動登録対象テーブル一覧
const AUTO_TABLE = ['users', 'foos'];
public function __construct() {}
// 対象のテーブルに対し「$ent」の内容で新規登録する
public function insert($table_name, $ent = []): void {
if(in_array($table_name, self::AUTO_TABLE)) {
$ent['created_at'] = now();
}
try {
DB::table($table_name)->insert($ent);
} catch(Exception $e) {
// 失敗処理
}
}
// 対象のテーブルに対し「$ent」の内容で新規登録し、登録したIDを返却する
public function insertGetId($table_name, $ent = []): int {
if(in_array($table_name, self::AUTO_TABLE)) {
$ent['created_at'] = now();
}
try {
return DB::table($table_name)->insertGetId($ent);
} catch(Exception $e) {
// 失敗処理
}
}
// 対象のテーブルに対し「$ent」の内容で更新する
public function update($table_name, $ent = []): void {
if(in_array($table_name, self::AUTO_TABLE)) {
$ent['updated_at'] = now();
}
try {
DB::table($table_name)->update($ent);
} catch(Exception $e) {
// 失敗処理
}
}
}
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use App\Models\Dao;
class HogeController extends Controller {
// 登録処理
public function dataSave(Request $request) {
$ent = [];
$ent['name'] = 'hoge_user';
$ent['email'] = '[email protected]';
$ent['password'] = '9999';
$dao = new Dao;
DB::beginTransaction();
$dao->insert('users', $ent);
DB::commit();
}
}
こちらの制御の方が自由度が高いと思います。
例えば今回のサンプルではコントローラ側では『try ~ catch』していません。
それはコントローラ側では極力ゴチャゴチャした処理は記述したくないからです。
『Dao』側では一応[catch]はできる様にしていますが、ここに何を記述すればコントローラ側に失敗を伝えられるでしょうか?
// SQL文を取得する
public function getRawSqlString($sql_name): string {
return file_get_contents(resource_path('sql/' . $sql_name . '.sql'));
}
public function index(Request $request) {
$dao = new Dao;
$users = DB::select($dao->getRawSqlString('users_name'), ['hoge_user']);
}
DBへ登録した場合は、登録したIDを確認したい場合があると思います。
その場合は、登録後以下[SELECT]を発行する事で確認できます。
$userId = DB::selectOne("SELECT LAST_INSERT_ID() as id")->id;