11
2

More than 1 year has passed since last update.

LaravelのEloquentはException投げるのか投げないのかどっちなんだーいオイッ!

Last updated at Posted at 2023-02-13

とある新人のコードレビューしていて質問されたのだが

新人「データベースのupdateでtry/catchしなくていいですよね?」
私「そんなあほな」
新人「だってVSCodeの表示ではreturn intてかいてます・・・」
私「ほわぁぁぁぁ!!!!」

LaravelのORMマッパEloquentのupdate/deleteが返す値

 * @return int
 */
public function update($query, $bindings = []);
  • ヾ(゚Д゚ )ォィォィ、まじかよ、intを返しやがるぜ!

今までtry/catchしてたのは無意味?

  • なんとなく遠い記憶で、return intだったのは知っていたが当然Exception投げるだろうとおもこんでいた
  • でもPHPDocには @throw はかいていない・・・
  • ちょっとまて、今までかいたやつは全部修正か・・・・
  • ぜんぶ修正なんて地獄絵図やぞ

実はPDOの設定がある

PHP 8.0.0 以降では、これがデフォルトのモードです。 
エラーコードを設定することに加え、PDO は PDOException をスローします
  • ふう、おれPHP8以上ーやたー

でも、Laravelは接続時に設定しておりましたよ

 11 class Connector
 12 {
 13     use DetectsLostConnections;
 14
 15     /**
 16      * The default PDO connection options.
 17      *
 18      * @var array
 19      */
 20     protected $options = [
 21         PDO::ATTR_CASE => PDO::CASE_NATURAL,
 22         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

結論として

  • try / catchで問題ない
  • php8以降はさらに try / catchで問題ない
  • updateやdeleteメソッドのPHPDocはなおしてほしいところ(投げないパターンがもしかしてあるのか??)
11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2