4

我有一个多选复选框列表。我想使用选中的复选框在列表中显示存储的值。

用户信息存储在Partner_Prefence表和名为p_religion的用户宗教列中

$profile_data= DB::table('partner_prefence')->select('p_religion')->first();

从宗教表中获取宗教

$religion_data=DB::table('religion')->select('religion_id','religion_name')->orderby('religion_name')->get();

多选列表

<select  multiple="multiple" name="religion[]">
   @foreach($religion_data as $religion)
     <option value="{{$religion->religion_id}}" {{$profile_data->p_religion == $religion->religion_id  ? 'selected' : ''}}>{{$religion->religion_name}}</option>
   @endforeach
</select>

我无法显示用户拥有哪些宗教

{{$profile_data->p_religion == $religion->religion_id  ? 'selected' : ''}}
4

2 回答 2

2

据我了解,您有多选表单,因此您需要显示选定的多列..

您将 id 存储为字符串,但很难检查字符串中的某个数字。如果将字符串转换为数组,则可以轻松检查in_array()方法。如果给定数组中存在给定值,此方法将返回 true

<select multiple="multiple" name="religion[]">
    {{-- no need to explode every time, it will reduce your performance --}}
    @php($religions = explode(',', $profile_data->p_religion))
    @foreach($religion_data as $religion)
        <option
                value="{{$religion->religion_id}}"
                {{--if user religion id exist in religions then mark as selected--}}
                {{in_array($religion->religion_id,$religions) ? "selected" : ""}}>
            {{$religion->religion_name}}
        </option>
    @endforeach
</select>
于 2018-10-02T10:21:11.397 回答
0

如果 p_religion 列是多选列表,它是否会保存多个 ID?然后会使用in_array()work 而不是使用$profile_data->p_religion == $religion->religion_id.

in_array ($religion->religion_id, explode(',', $profile_data->p_religion))

explode()在存储内爆数组时添加了调用。

您还可以尝试将刀片语法用于内联 if 语句,以查看它是否显示不同。

<select  multiple="multiple" name="religion[]">
     @foreach($religion_data as $religion)
          <option value="{{$religion->religion_id}}" @if($profile_data->p_religion == $religion->religion_id) selected @endif>
               {{$religion->religion_name}}
          </option>
     @endforeach
</select>
于 2018-10-01T20:45:14.507 回答