Как показать выбранный флажок в списке множественных флажков в 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>