Blog スタッフブログ

Laravel システム開発

[Laravel]checkboxで選択された複数の値をカンマ区切りで保存し利用する

システム開発担当のTFです。

やり方

  • checkboxで複数の値をPOSTする
  • POSTされた値を、implode 関数でカンマ区切りの文字列に変換し保管する
  • 配列に戻す際は、explode 関数を使う
  • edit画面では、in_arrayで選択された値か判定を行う

サンプル

<form method="post" action="{{ route('test.store') }}">
	@csrf
	@method('POST')
	
	<div>
		<input type="checkbox" id="id_1" name="id[]" value="1" />
		<label for="id_1">ID: 1</label>
	</div>
	<div>
		<input type="checkbox" id="id_2" name="id[]" value="2" />
		<label for="id_2">ID: 2</label>
	</div>
	<div>
		<input type="checkbox" id="id_3" name="id[]" value="3" />
		<label for="id_3">ID: 3</label>
	</div>
	<button type="submit">送信</button>
</form>
public function store(Request $request)
{
	// idの配列からカンマ区切りの文字列を作成し保存
	$ids = implode(",", $request->id);
	
	$test = new Test();
	$test->ids = $ids;
	$test->save();
}

public function edit(Test $test)
{
	// カンマ区切りの文字列からidの配列を作成
	$id = explode(",", $test->ids);
	
	return view('test.edit', compact('test', 'id'));
}
<form method="post" action="{{ route('test.update', $test->id) }}" >
	@csrf
	@method('PUT')
	
	{{-- 選択されたidにcheckedを付ける --}}
	@php
		$id = old('id', $id);
	@endphp
	<div>
		<input type="checkbox" id="id_1" name="id[]" value="1" @if( in_array(1, $id) ) checked @endif />
		<label for="id_1">ID: 1</label>
	</div>
	<div>
		<input type="checkbox" id="id_2" name="id[]" value="2" @if( in_array(2, $id) ) checked @endif />
		<label for="id_2">ID: 2</label>
	</div>
	<div>
		<input type="checkbox" id="id_3" name="id[]" value="3" @if( in_array(3, $id) ) checked @endif />
		<label for="id_3">ID: 3</label>
	</div>
	<button type="submit">送信</button>
</form>