Функция уничтожения Laravel всегда удаляет запись с самым низким идентификатором - PullRequest
0 голосов
/ 09 июня 2018

я новичок в Laravel.Поэтому я пытаюсь удалить запись из базы данных с моей страницы индекса.Но это только удалить запись с самым низким значением первичного ключа, мое поле id.Вот мой код контроллера для функции уничтожения:

public function destroy(Province $province)
    {
        //

        $findProvince = DB::table('provinces')->where('id', $province->id)->delete();

        if($findProvince){
            return redirect()->route('provinces.index')->with('success', 'Province deleted successfully');
        }
        return back()->with('error', 'Province could not be deleted');

        //var_dump($province->id);
    }

Вот мой код представления:

@extends('layouts.app')

@section('content')
<div class="col-md-8 offset-md-2">
    <br/>
    <div>
        <a href="provinces/create" class="btn btn-primary">Add New Province</a>
    </div>
    <br/>
    <table class="table">
        <thead>
            <tr>
            <th scope="col">#</th>
            <th scope="col">Name</th>
            <th scope="col">Image</th>
            <th scope="col">Operations</th>
            </tr>
        </thead>
        <tbody>
            @foreach($provinces as $province)
                <tr>
                    <th scope="row">{{ $province->id }}</th>
                    <td>{{ $province->name }}</td>
                    <td><img src="../{{ $province->imgPath }}" width="200px"/></td>
                    <td>
                        <a href="provinces/{{ $province->id }}/edit" class="btn btn-warning">Edit</a> | 
                        <a
                                class="btn btn-danger"
                                href="#"
                                onclick="
                                  var result = confirm('Are you sure you wish to delete this province?');
                                      if( result ){
                                              event.preventDefault();
                                              document.getElementById('delete-form').submit();
                                      }
                                ">Delete
                        </a>

                        <form id="delete-form" action="{{route('provinces.destroy', $province->id)}}" method="POST" style="display: none;">
                            <input type="hidden" name="_method" value="delete">
                            {{ csrf_field() }}
                        </form>
                    </td>
                </tr>
            @endforeach

        </tbody>
    </table>
</div>
@endsection

Я пытался использовать var_dump для идентификатора $ Province->, но он выводил только самый низкий идентификатор' значение.

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Спасибо всем за вашу помощь.И извините, что я долго отвечал.Я был действительно занят другими школами.Так что мне удалось отследить проблему с моим кодом.Это с моей точки зрения.Все созданные формы удаления имеют одинаковый идентификатор.Так что, если я просто добавил идентификатор записи в форму.Работает просто отлично.

0 голосов
/ 09 июня 2018

id уникальны.Вы получите это неожиданное поведение, если будете использовать тот же id в цикле.Либо используйте уникальные идентификаторы, либо поместите свои кнопки внутри form (я предлагаю это).

<td>
    <form class="delete-form" action="{{ route('provinces.destroy', $province->id) }}" method="POST">
        <input type="hidden" name="_method" value="delete">
        {{ csrf_field() }}

        <a href="provinces/{{ $province->id }}/edit" class="btn btn-warning">Edit</a> | 
        <a class="btn btn-danger">Delete</a>
    </form>
</td>

А затем используйте этот Javascript в отдельном файле для подтверждения:

(function(){
    let forms = document.querySelectorAll('form.delete-form');
    [].forEach.call(forms, function(form){
        form.onsubmit = function(e) {
            if ( ! confirm('Are you sure you wish to delete this province?'))
                return e.preventDefault();
        }
    });
})();

Если вы все еще хотите использовать свой подход, добавьте идентификатор $province в атрибут id вашей формы.Это сделает вашу форму уникальной, поэтому вы получите к ней доступ с помощью id.

<form id="delete-form-{{ $province->id }}" ...>

А затем ваш Javascript:

if( result ){
    event.preventDefault();
    document.getElementById('delete-form-{{ $province->id }}').submit();
}
...