質問: laravelで投票サイトを構築中です。 Contoller側の処理がわからずに困っています。 ラジオボタンで投票するとデータベースの値をインクリメントできるものを実装中ですが、うまくいきません。 男性か女性かをラジオボタンで投票してもらい、それをデータベースにある男性投票数、女性投票数をインクリメントしたいです。 ``` {{ csrf_field() }} 男性ですか?女性ですか? men woman ``` ``` public function index(){ return view('index'); } public function post(Request $request){ ここのインクリメントする処理がわかりません。 $items=DB::table('user')->get(); return view('vote_result',['items'=>$items,]); } ```
回答: 前提条件でわからない箇所があるので一部推測で記載します。 やりたい事をやるならpostの処理は以下です。一応解説コメントも付けてあります。 ``` public function post(Request $request) { $sex = $request->input('sex'); // sexの値を取得する $update_target_user = User::where('sex', $sex)->first(); // 更新するuserのデータを取得。モデルはuseでimportしてください。 $update_target_user->vote_count = $update_target_user->vote_count + 1; // 現在の投票数に対してインクリメントする。 $update_target_user->save(); // データを更新する return view('vote_result',['items'=>$items,]); } ``` 詰まった箇所はRequestのデータ取得でしょうか? DBからデータを引っ張ってくるところでしょうか? 何がわからないのかを具体的に記載すると、回答されやすくなりそうですよ! 以下はLaravelやシステム構築に慣れてからで良いのですが、 上記のコードでは同時に大量のユーザが投票した時に投票数が正しく更新されません。何かしらデータの整合性を保つ事を検討しましょう。 また、今回のような投票数をレコードに保持させる設計は、拡張性が低いので、 投票したユーザをDBに格納して、投票数を返却する時に投票者のcountをとる方法が良さそうです。 この辺りは質問レベル的にまだ考慮できなくて良いと思いますので、まずはある程度コードをかけるようになっちゃいましょう。