Laravel(6.18.40)のFormファザードを使って会員検索フォームを作成しています。
初回アクセス時に入力された検索条件をDBに保存し、再アクセス時にはDBから呼び出して各要素の初期値として反映させたく考えています。
以下はそのソースコード(ビュー)です。
各セレクト要素の第三引数にDBから呼び出した初期値を設定しています。
第二引数のconfigは、それぞれ配列で「array('1'=>'男性','2'=>'女性'…」「array('1'=>'北海道','2'=>'青森県'…」といった値を用意しています。
@section('content') {{Form::open()}} <table class="common"> <tr> <th>性 別</th> <td>{{Form::select('sex', config('sex'), optional($data)->sex)}}</td> </tr> <tr> <th>都道府県</th> <td>{{Form::select('pref[]', config('pref'), optional($data)->pref, ['multiple' => 'multiple'])}}</td> </tr> <tr> <th>年 齢</th> <td> {{Form::select('age01', config('age'), optional($data)->age01)}}<span class="small"> 歳</span>~ {{Form::select('age02', config('age'), optional($data)->age02)}}<span class="small"> 歳</span></td> </tr> <tr> <td colspan="2" class="center">{{Form::hidden('save', 0)}}{{Form::checkbox('save', 1, null, ['id'=>'save'])}}<label for="save">この条件を保存</label></td> </tr> <tr> <td colspan="2" class="button">{{Form::submit('この条件で検索', ['class'=>'button'])}}</td> </tr> </table> {{Form::close()}} @endsection
呼び出す初期値ですが、DBでは以下のデータ型と値(今回の例)を設定しています。
$data->sex:整数型(値:2)
$data->pref:配列をテキスト型で保存(値:["1","3","5"])
$data->age01:整数型(値:20)
$data->age02:整数型(値:30)
これにより、性別「女性」、都道府県「北海道、岩手県、秋田県」、年齢「20~30」となることを想定しています。
以下は実行した際の実際の画面キャプチャです。単一選択型の「性別」と「年齢」は反映されていますが、複数選択型の「都道府県」が反映されていません。
そもそものデータが呼ばれていないのかなと思い、都道府県の値である「$data->pref」をそのままecho出力したのですが、想定通り["1","3","5"]が表示されました。これをコピペしてセレクト要素の第三引数(初期値)に直接記述すると、正しく反映されます。
{{Form::select('pref[]', config('pref'), ["1","3","5"], ['multiple' => 'multiple'])}}
ところが、同じく第三引数に変数($data->pref)で記述すると、フォームに反映されません。この変数は配列として正しく認識されていないのでしょうか。(出力されたHTMLソースを見てもselectedがありません)
{{Form::select('pref[]', config('pref'), optional($data)->pref, ['multiple' => 'multiple'])}}
基礎的なところで大変恐縮ですが、上記の問題について諸先輩方のご助言をいただけますと幸いです。
どうぞ、よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー