Как показать выбранный флажок в списке множественных флажков в laravel?

У меня есть список выбора нескольких флажков. Я хочу, чтобы показать сохраненное значение в списке, используя флажок.

Информация о пользователях хранится в таблице 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' : ''}}

2 ответа

Решение

Как я понимаю, у вас есть форма множественного выбора, поэтому вам нужно показать выбранный несколько столбцов..

Вы храните идентификаторы в виде строки, но это сложно проверить определенное число в строке. Если вы конвертируете строку в массив, вы можете легко проверить с помощью 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>

Сохраняет ли столбец p_religion несколько идентификаторов, если это список с множественным выбором? Будет использовать in_array() работать тогда вместо использования $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>
Другие вопросы по тегам