とある新人のコードレビューしていて質問されたのだが
新人「データベースの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はなおしてほしいところ(投げないパターンがもしかしてあるのか??)