Получение только 1 радиокнопки для сохранения вместо 2 - PullRequest
0 голосов
/ 14 марта 2019

На моей странице может быть несколько addresses, но user может выбрать только один address.

У меня проблема в том, что обе мои радиокнопки сохраняются, а не одна.

Таким образом, если у пользователя 2 addresses, тогда только у одного должен быть selected = 1, а другой адрес должен быть selected = 0, но на данный момент оба address = 1.

Мне не удалось выбрать и сохранить только 1 address как таковой в базе данных. Я знаю, что пропускаю ID выбранной радиокнопки, но я надеялся, что это произойдет.

E.G: Когда пользователь сохраняет свой первый адрес, который затем сохраняется как его выбранный адрес (selected = 1), и любые другие адреса, которые он добавляет после этого, будут (selected = 0).

Если они передумают и захотят, чтобы их второй адрес был тем, который они используют, выберите его, и тогда он станет таким, адрес 1 (selected = 0) и адрес 2 станут (selected = 1).

Надеюсь, это имело смысл. Если это не помогло, дайте мне знать.

Моя форма

@foreach($addresses as $address)
    <div class="col-lg-4">
        <form id="address-radio" action="{{ route('account.post.addresses.radio', $address->id) }}" method="post">
            @csrf
            <div class="form-check">
                <input type="radio" class="form-check-input" name="address_option" id="address_{{ $address->id }}" {!! $address->selected == '1' ? 'checked' : '' !!}>
                <label for="address_{{ $address->id }}" class="form-check->label">
                    @if(!empty($address->complex))
                        {{ $address->complex }} <br>
                    @endif
                    {{ $address->address }} <br>
                    {{ $address->suburb }} <br>
                    {{ $address->city }} <br>
                    {{ $address->province }} <br>
                    {{ $address->postal_code }} <br>
                </label>
            </div>
        </form>
    </div>
@endforeach

<script>
    $(document).ready(function(){
        $('input[type="radio"]').on('change', function(){
            $(this).closest("form").submit();
        })
    })
</script>

и это моя функция

public function postAddressesRadio(Request $request, $id)
{
    $selected = Address::findOrFail($id);
    $user_id = Auth::user()->id;

    $not_selected = $selected->where('id', '!=', $id)
                                ->where('user_id', $user_id)->get();

    foreach($not_selected as $selected)
    {
        $selected->selected = "0";
    }

    if($request->address_option == 'on'){
        $selected->selected = '1';
    }

    $selected->save();

    return redirect()->back()->with('success', 'Address was updated');
}

1 Ответ

0 голосов
/ 14 марта 2019

Так что мне удалось это сделать.Я не уверен, что есть лучший способ, но это работает.

В своей функции я сделал

public function postAddressesRadio(Request $request, $id)
{
    $address = Address::findOrFail($id);
    $user_id = Auth::user()->id;

    $addresses = Address::where('user_id', $user_id)->get();

    foreach($addresses as $address)
    {
        if($address->id == $id)
        {
            $address->selected = "1";
        }else{
            $address->selected = "0";
        }

        $address->save();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...