こんばんは!piyokokkoxです🐥
本日はプライベートの用事がありまして更新が遅くなってしまいました🙇♀️
今回は開発者らしく、開発の話題になります!
私が開発の仕事に就いてから、割と初期の頃に躓いていた処理についてお話ししたいと思います。
「DB::transaction」というDBの作成、更新をよしなにしてくれるメソッドがLaravelには存在します。これを噛ませることにより、エラーが出て処理が停止してしまっても、ロールバックをしてくれます。逆を言えば、これを噛ませないとそのまま処理が進んでしまい、宙ぶらりんなデータが生まれてしまったりしてしまいます。
今回は、そんなメソッドのreturnの扱いについて説明したいと思います。
- DB::transaction内の無名関数でのreturnについて
こちらはNG例
<?php public function example($name, $id) { DB::transaction(function () use ($name, $id) { $user= User::where([ ['name', $name], ['id', $id] ])->first(); return $user; }); } $this->example('hoge', 1); // 返り値はnull ?>
理由としては、DB::transactionはあくまでもDBでのデータの作成、更新処理など、DBの一覧の操作を処理するためのものです。 その中でreturnをしてもexampleメソッドの返り値にはなりません。
OK例を以下に示します。
<?php public function example($name, $id) { return DB::transaction(function () use ($name, $id) { $user= User::where([ ['name', $name], ['id', $id] ])->first(); return $user; }); } $this->example('hoge', 1); // 返り値はテーブル内に対象のデータが存在する場合は任意の値が返ってくる。 ?>
DB::transaction自体をreturnしてあげると、結果が返されます。 私は最初の頃これで躓いていました。エラーは出ないのでわからないんですよね😂
この記事では、基本的な話になると思いますが、DB::transactionのreturnの取り扱いについて紹介しました。
この記事を読んで、少しでも参考になればいいと思います。
ここまで読んでいただきありがとうございました!