laravel-admin 編集画面でcheckboxをchekcedにする
こんばんは。syunです。
久々にlaravel-adminで開発をしたら、とても初歩的なところで時間を取られてしました。
ぐぐってもなかなか解決策に当たらず、、こんな事象が起きているのは自分だけなのかと疑いながら
何とか解消することができました。
ただしい方法ではない気は満載なので、誰かきちんとした対応方法ご存じであれば教えてください。
laravel-adminでの発生事象
formにcheckboxを設定し、顧客に対してのタグを登録できるようにしました。
こちらの画像のように、会員に対して「会員タグ」を設けて
顧客ごとに設定できるようにしました。
このデータを登録することは問題なく完了。
このような状態で格納されています。
["0","1","2"]
0:クレーマー 1:優良顧客 2:同業 という定義ですね。
次に、このデータを編集しようとした際に、課題発生
ん
「1:優良顧客 2:同業」がチェックされていない。
データ上は正しく登録されていることは確認済み。
解決方法
色んな登録方法を試したり、ソースをひっくり返して解析し
たどり着いた方法です。
コアファイルを触ることになりますので、ご注意ください。
Laravel-adminのバグなのかわかりませんが、正しい対応方法あればご連絡ください。
改修箇所
checkbox.blade.phpというファイルを修正します。
23行目あたり
修正前
<input type="checkbox" name="{{$name}}[]" value="{{$option}}" class="{{$class}}" {{ false !== array_search($option, array_filter(old($column, $value ?? []))) || ($value === null && in_array($option, $checked)) ?'checked':'' }} {!! $attributes !!} />{{$label}}
修正後
<input type="checkbox" name="{{$name}}[]" value="{{$option}}" class="{{$class}}" {{ (in_array($option, $checked)) ?'checked':'' }} {!! $attributes !!} />{{$label}}
checkedに対する条件分岐を修正し
$value === null &&
の部分をごっそり消してしまいました。
この部分がどの制御に使われていたのか詳細まで把握できませんでしたが
一通り検証し、問題なく動作していることは確認しております。
改修後
編集画面にて、登録済みの情報が正しくcheckedにチェックされるようになりました。
checkboxを表示させるコントローラ側の実装はこのような形です。
CustomerTagテーブルのtagカラムから今回必要となる情報を取得しています。
$tag = CustomerTag::whereCustomerId($customer->id)->first(); $form->checkbox('tag',__('会員タグ')) ->options([0 => 'クレーマー', 1 => '優良顧客', 2 => '同業']) ->checked($tag->tag);
同様の課題にぶつかって、諦めそうな方は試してみてください。