📝

【Laravel】UpdateOrCreateで作成・更新の処理をシンプルに!(使用例付)

2022/06/18に公開

はじめに

業務中の気づきや、学習中の備忘録を残したいなと思ったので記事を書き始めることにしました!
今回は冗長なコードも載せて、ヘルパ関数のUpdateOrCreateを解説したいと思います。

対象者

この記事は下記のような人を対象にしています。

  • プログラミング初学者
  • 駆け出しエンジニア
  • 「作成と更新の処理を別々で書いているけどもっとシンプルに書きたい!」
  • 「便利なヘルパ関数を知りたい!」

前提

Hogeテーブル

key value
hogeKey1 hogeValue1
hogeKey2 hogeValue2

※理解がしやすい様に必要最低限のカラム数にしています。
Hogeテーブルで上記のレコードを2つ作成する場合があったとします。

結論(updateOrCreate)

$insertData = [
	[
		'key'   => 'hogeKey1',
		'value' => 'hogeValue1',
	],
	[
		'key'   => 'hogeKey2',
		'value' => 'hogeValue2',
	],
];

foreach ($insertData as $data) {
	SystemConfig::updateOrCreate(['key' => $data['key']], $data);
}

作成・更新を別々に記述

$insertData = [
	[
		'key'   => 'hogeKey1',
		'value' => 'hogeValue1',
	],
	[
		'key'   => 'hogeKey2',
		'value' => 'hogeValue2',
	],
];

$existsHoge1 = Hoge::where('key', 'hogeKey1')->exists();
$existsHoge2 = Hoge::where('key', 'hogeKey2')->exists();

if ($existsHoge1 && $existsHoge2) {
	// 更新処理
	Hoge::where('key', 'hogeValue1')->update(['value' => 'hogeUpdateValue1']);
	Hoge::where('key', 'hogeValue2')->update(['value' => 'hogeUpdateValue2']);
        } else {
	        // 作成処理
            foreach ($insertData as $data) {
                Hoge::create($data);
            }
        }
    }

解説

使用方法は以下になります。
updateOrCreate(['カラム名' => 存在を調べるための値], ['カラム名' => 格納する値],);
第一引数:対象のモデル内のカラムに指定の値があるかどうかの判定
第二引数:すでに値があれば引数の値で更新、なければ作成

updateOrCreateは値がなければ新規作成、あれば更新を一つの関数でおこなってくれます。
モデルに値があるかどうかをexistsなどで判定して、createとupdateを分ける処理より短くてコードが見やすいですね!

おわりに

関数一つでコードを短くできるのに、その関数を知らず遠回りな実装になってしまう経験が誰しもあると思います。
updateOrCreateに限らず、Laravelには便利なヘルパ関数が数多く存在しているので、
「ここの処理いっぺんにできないかな?」と疑問に思ったなら公式ドキュメントや技術記事などで調べてみるのもいいと思います!

また初めての技術記事なので、読みにくい箇所や間違っている記述などがあればコメントでご指摘くださいorz

Discussion