始めに
Laravelのインサート、アップデート、アップサートは多用するので
コピペ用の記事+備忘録として作成しました。
環境
開発環境 | バージョン |
---|---|
Laravel | 8.83.19 |
PHP | 7.3.10 |
インサート(insert)
InsertFunctionController.php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Exception;
/**
* インサート機能
* @params array インサートしたい情報
*/
public function insertFunction($params)
{
// 初期設定
$isError = false;
// トランザクション開始
DB::beginTransaction();
try {
// インサート情報
$insertStr = [
'column_1' => $params['column_1'],
'column_2' => $params['column_2']
// ... 略
];
// テーブルA(tbl_A)にインサートする
$sqlData = DB::table('tbl_A');
$result = $sqlData->insert($insertStr);
if ($result == false) {
throw new Exception('インサート中にエラーが発生しました。');
}
} catch (Exception $e) {
// ログ出力
Log::error(get_class($this).':'.__FUNCTION__);
Log::error($e->getMessage());
$isError = true;
} finally {
// エラーが存在する場合
if ($isError == false) {
// コミットする
DB::commit();
// エラーが存在しない場合
} else {
// ロールバックする
DB::rollback();
}
}
}
アップデート(update)
UpdateFunctionController.php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Exception;
/**
* アップデート機能
* @params array アップデートしたい情報
*/
public function updateFunction($params)
{
// 初期設定
$isError = false;
// トランザクション開始
DB::beginTransaction();
try {
// アップデート情報
$updateStr = [
'column_1' => $params['column_1'],
'column_2' => $params['column_2'],
// ... 略
'updated' => date('Y-m-d H:i:s')
];
// テーブルB(tbl_B)にアップデートする
$sqlData = DB::table('tbl_B');
$result = $sqlData->update($updateStr);
if ($result < 0) {
throw new Exception('アップデート中にエラーが発生しました。');
}
} catch (Exception $e) {
// ログ出力
Log::error(get_class($this).':'.__FUNCTION__);
Log::error($e->getMessage());
$isError = true;
} finally {
// エラーが存在する場合
if ($isError == false) {
// コミットする
DB::commit();
// エラーが存在しない場合
} else {
// ロールバックする
DB::rollback();
}
}
}
アップサート(upsert)
UpsertFunctionController.php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Exception;
/**
* アップサート機能
* @params array アップサートしたい情報
*/
public function upsertFunction($params)
{
Log::debug(__FUNCTION__);
// トランザクション開始
DB::beginTransaction();
try {
// 初期設定
$isError = false;
// 検索情報
$searchStr = [
'column_a' => $params['column_a'] // 検索したいカラム
];
// アップサート情報
$upsertStr = [
'column_1' => $params['column_1'],
'column_2' => $params['column_2'],
// ... 略
];
// テーブルC(tbl_C)にアップサートする
// テーブル内に検索情報が存在しない場合 → インサート
// テーブル内に検索情報が存在する場合 → アップデート
$sqlData = DB::table('tbl_C');
$result = $sqlData->updateOrInsert($searchStr, $upsertStr);
if ($result == false || $result < 0) {
throw new Exception('アップサート中にエラーが発生しました。');
}
} catch (Exception $e) {
// ログ出力
Log::error(get_class($this).':'.__FUNCTION__);
Log::error($e->getMessage());
$isError = true;
} finally {
// エラーが存在する場合
if ($isError == false) {
// コミットする
DB::commit();
// エラーが存在しない場合
} else {
// ロールバックする
DB::rollback();
}
}
}
最後に
以上、DB登録の実装方法でした。
もっといい書き方ありありましたら、コメントいただけますとありがたいです。💦
よろしくお願いします。