Laravel 5.6 でEloquentモデルを使用してレコードがあった場合Update、なかった場合Insertを行いたいのですが、どのようにするのが一番よいのでしょうか。
テーブルには挿入、更新系のカラムとして、
- created_at (作成日時)
- update_at (更新日時)
- c_user_id (作成ユーザーID)
- u_user_id (更新ユーザーID)
があります。
日時のカラムはLaravel側で自動で更新されるのでいいとして、ユーザーIDのカラムを場合に応じて入れたり入れなかったりしたい訳ですが、思いつく方法がどれも二度手間な気がしています。
思いつくのは下記3パターン位です。もっと違うやり方がありませんでしょうか。
よろしくお願いします。
// ※'departure'はUKの想定です // 1.件数取得後条件分岐 $count = Flight::where('departure', 'Oakland')->count(); if($count == 0) { $flight = new Flight(); $flight->price = 99; $flight->c_user_id = 1; $flight->u_user_id = 1; $flight->save(); } else { $flight = Flight::where('departure', 'Oakland')->first(); $flight->price = 99; $flight->u_user_id = 1; $flight->save(); } // 2.件数取得後、条件を設定してupdateOrCreate $count = Flight::where('departure', 'Oakland')->count(); $values = ['price' => 99]; if($count == 0) { $values['c_user_id'] = 1; $values['u_user_id'] = 1; } else { $values['u_user_id'] = 1; } $flight = Flight::updateOrCreate( ['departure' => 'Oakland'], $values ); // 3.firstOrNew $flight = Flight::firstOrNew(['departure' => 'Oakland'], []); $flight->price = 99; if($flight->id == null) { // idがなければ新規追加と判断 $flight->c_user_id = 1; $flight->u_user_id = 1; } else { // 更新 $flight->u_user_id = 1; } $flight->save();
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/13 12:45
退会済みユーザー
2018/10/13 18:58
2018/10/24 06:08