laravel5.1で、複数選択OKのチェックボックスをMySQLに格納する方法
1 2 3 4 5 6 7 8 |
// edit.blade.php // 変数名[]で、配列指定にする。 {!! Form::checkbox('commuting_division[]', 'マイカー'); !!}マイカー {!! Form::checkbox('commuting_division[]', '自転車'); !!}自転車 {!! Form::checkbox('commuting_division[]', 'バス'); !!}バス {!! Form::checkbox('commuting_division[]', '電車'); !!}電車 {!! Form::checkbox('commuting_division[]', '徒歩'); !!}徒歩 {!! Form::checkbox('commuting_division[]', 'その他'); !!}その他 |
フォームからは配列で送信。受信したらカンマ区切りの文字列に変更してMySQL格納。
詳細画面では、カンマ区切りのまま
編集画面では、strpos関数で存在チェックして、該当するチェックボックスをcheckedにする
画面のチェックボックス要素に依存するとはいえ、Model Bindingを使っているのだから、もう少しキレイに書きたい…。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// UserController.php // 編集画面生成 public function edit($id) { $user = User::findOrFail($id); // MySQLの通勤区分カラム(カンマ区切り)に、キーワードが入っているかチェックする(入ってたらchecked) $list = array('マイカー','自転車','バス','電車','徒歩','その他'); for($i=0; $i<count($list); $i++){ if(false === strpos($user->commuting_division, $list[$i])){ $arr_commuting_division[$i] = false; }else{ $arr_commuting_division[$i] = true; } } return view('users.edit', compact('user', 'arr_commuting_division')); } // MySQLに格納時の処理、 store(新規作成)でも同じ public function update(Request $request, $id) { $this->user = User::findOrFail($id); $data = $request->all(); // 複数チェックOKなカラムは配列で送信されるので、カンマ区切りに修正してから格納。 if(!empty($request->get('commuting_division'))){ $str_commuting_division = implode(",", $data['commuting_division']); $data['commuting_division'] = $str_commuting_division; }else{ $data['commuting_division'] = ''; } $this->user->fill($data); $this->user->save(); return redirect()->to('/user/'.$id); } |