概要
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)
を利用しているが、実際のデータは更新されなくても、更新成功判定が出てしまうので、より良い実装方法がないかを模索中です。