0
0

Laravel Eloquentのupdateの挙動がどうもうまくいかない

Posted at

概要

Laravel Eloquentにおいて、updateの結果をレスポンスとして返すような状況も想定される(特にAPI)と思われるが、
どうもうまくいかなかったので備忘録的に残してる記事である。

前提知識

whereとfindでのupdateにおける返り値の違い

※ こちらの記事大変参考になりました。ありがとうございます!

起こった事

  • find($id)->update($values)
    • 更新成否が不明
      • 更新失敗でもつねに返り値trueが返る
  • where(['id' => $id])->update($values)
    • 不正なカラムでupdateすると、find()だとtrueを返すのに対し、where()はしっかりエラーを返す。
    • しかし、更新前と同じデータや空の情報で更新処理を行った場合、実際のデータは更新されないが、更新成功判定(return 1)は出てしまう。

暫定策

public function update(int $id, Request $request): JsonResponse
{
    $player = Player::where(['id' => $id]);
    $updateResult = $player->update($request->except('id')) ? 'success' : 'failure';
    return response()->json(['result' => $updateResult]);
}

一旦、エラー時は拾えるため、where(['id' => $id])->update($values)を利用しているが、実際のデータは更新されなくても、更新成功判定が出てしまうので、より良い実装方法がないかを模索中です。

0
0
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
0
0