Итак, у меня есть html-форма при регистрации, где вы видите дополнительную опцию exa_name из таблицы «Дополнительно», цену из таблицы «Дополнительно» и выбор из таблицы «Дополнительные опции», который подключается к таблице «Дополнительно».

Проблема: выборки (я использую foreach) показывают все строки в Extraoptions->eos_name, и я хочу, чтобы он показывал eos_name, где eos_extra_id совпадает с exa_id!

html-форма: это то, что у меня есть сейчас, я не уверен, как я могу сравнить eos_extra_id и exa_id в значении параметра

//options(exa_name from the Extra table)
<label>Options</label><br>
                        @foreach($options as $option)   
                            <div>                   
                                <input type="checkbox" class="option" id="option_{{ $option->exa_id }}" name="option_{{ $option->exa_id }}" value="{{ $option->exa_id }}" {{ isset($cache) ? (isset($cache['option_' . $option->exa_id]) ? 'checked' : '')  : (old() ? (old('option_' . $option->exa_id) ? 'checked' : '') : ($registration ? (in_array($registration ->exa_id, $registration_options) ? 'checked' : '') : '')) }} >
                                <input type="hidden" value="{{ $option->exa_price }}" class="option_price_{{ $option->exa_id }}">
                                <label>{{ $option->exa_name }}</label> <label class="exa_price">  €{{ $option->exa_price }} </label>    
                            </div>

//extra options select
<select name="extraoptions" class="form-control">
                                <option></option>
                                @foreach($extraoptions as $extraoption)
                                    <option value="{{ $extraoption->eos_id }}" 

                                        {{ (exa_id('eos_extra_id') == $extraoption->eos_id ? 'selected' : "") }}>
                                    {{ $extraoption->eos_name }}</option>
                                @endforeach
                            </select>
                       @endforeach

Заранее спасибо!

-1
Sander105 28 Окт 2019 в 17:50
1
Где это exa_id ? почему вы не выбрали нужные параметры перед отправкой $extraoptions в представление?
 – 
N69S
28 Окт 2019 в 18:01
Отредактировал мой пост, надеюсь, что ответил на ваши вопросы!
 – 
Sander105
28 Окт 2019 в 18:15
Итак, вы хотите, чтобы второй выбор менялся, когда пользователь выбирает первый?
 – 
N69S
28 Окт 2019 в 18:27
Нет, я хочу, чтобы при выборе отображалось exa_name, но eos_extra_id должен совпадать с exa_id. Потому что теперь он просто показывает каждую дополнительную опцию в строке eos_name.
 – 
Sander105
28 Окт 2019 в 19:01

1 ответ

Похоже, вы хотите ограничить отображение $extraoptions теми, которые имеют такое же exa_id. Для этого используйте простую функцию filter() в вызове @foreach():

<label>Options</label><br>
@foreach($options as $option)   
<div>                   
    <input type="checkbox" class="option" id="option_{{ $option->exa_id }}" name="option_{{ $option->exa_id }}" value="{{ $option->exa_id }}" {{ isset($cache) ? (isset($cache['option_' . $option->exa_id]) ? 'checked' : '')  : (old() ? (old('option_' . $option->exa_id) ? 'checked' : '') : ($registration ? (in_array($registration ->exa_id, $registration_options) ? 'checked' : '') : '')) }} >
    <input type="hidden" value="{{ $option->exa_price }}" class="option_price_{{ $option->exa_id }}">
    <label>{{ $option->exa_name }}</label> <label class="exa_price">  €{{ $option->exa_price }} </label>    
</div>
<select name="extraoptions" class="form-control">
    <option></option>
    @foreach($extraoptions->filter(function($exOpt){ return $exOpt->eos_id == exa_id('eos_extra_id'); }) as $extraoption)
    <option value="{{ $extraoption->eos_id }}">{{ $extraoption->eos_name }}</option>
    @endforeach
</select>
@endforeach

Чтобы уточнить, я удалил логику selected, так как установка selected для нескольких элементов <option> внутри одного немножественного <select> мало что даст, за исключением того, что последний подходящий вариант отображается как выбранный по умолчанию.

0
Tim Lewis 28 Окт 2019 в 18:18
Спасибо за ответ! с $exOpt вы имеете в виду $extraoption или $extra?
 – 
Sander105
28 Окт 2019 в 18:27
Будет $extraoption; $exOpt — это просто имя переменной для использования внутри функции. Я избегал $extraoption, так как это название каждой итерации $extraoptions.
 – 
Tim Lewis
28 Окт 2019 в 18:29
Я попробовал ваш код, и я получил сообщение об ошибке: неопределенная функция exa_id()
 – 
Sander105
30 Окт 2019 в 11:01
Возможно, вам придется передать exa_id в функцию (function($exOpt) use (exa_id){ ... }, но я не думаю, что это работает с функциями, а exa_id не является функцией в Laravel; это то, что вы (или плагин, который вы используете).
 – 
Tim Lewis
30 Окт 2019 в 17:16