Я делаю страницу редактирования, которая имеет флажки, и я хочу, чтобы laravel запомнил старые данные. Я храню в базе данных 1 или 0 значений для конкретной опции.

@foreach( $options['tuning'] as $key => $option)
    <div class="col-3 rent-car-security">
        <input type="checkbox" name="{{ $option }}" id="{{ $option }}"
               value="1" {{ old($option, $car->tuning_options->{ $option }) ? 'checked' : '' }}>
        <label for="{{ $option }}">{{ $key }}</label>
    </div>
@endforeach

Контроллер

private $tuning_options = [
  'Made for racing' => 'made_for_racing',
  'Increased engine power' => 'increased_engine_power'
];
------------
$options = [
  'tuning' => $this->tuning_options
];

return view('cars.edit', compact(['car', 'options']));

Форма работает правильно, если в начале была опция 0

2
viiskis 11 Апр 2019 в 11:57

2 ответа

Лучший ответ

Я делаю это, чтобы извлечь выбранные опции из базы данных и превратить их в массив, пример ниже:

контроллер (метод редактирования):

public function edit($id) {
    $options = Options::all();
    $selected_options = $options->pluck('id')->toArray()

    return view('example.view', compact('selected_options')); 
}

и тогда, на мой взгляд, я бы сделал следующую логику:

@foreach( $options['tuning'] as $key => $option)
    <div class="col-3 rent-car-security">
        <input type="checkbox" name="{{ $option }}" id="{{ $option }}" value="1" {{ in_array($option, $selected_options) ? 'selected' : '' }}>
        <label for="{{ $option }}">{{ $key }}</label>
    </div>
@endforeach

Я надеюсь, что это поможет, дайте мне знать. Это основано на ограниченном коде, который вы предоставили, и является просто примером для начала - если вы предоставите больше, я был бы рад помочь вам полностью решить проблему

3
CodeBoyCode 11 Апр 2019 в 09:06

Я добавил скрытый ввод, и теперь он работает отлично

<input type="hidden" name="{{ $option }}" value="0">
0
viiskis 11 Апр 2019 в 11:51