Laravel destroy函数总是删除id最低的记录

时间:2018-06-09 08:08:07

标签: php laravel-blade laravel-5.6

我是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

我尝试在$ province-&gt; id上使用var_dump,但它只输出最低的'id'值。

2 个答案:

答案 0 :(得分:1)

id是独一无二的。如果在循环中使用相同的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属性中。这会使您的表单独一无二,因此您可以使用id访问它。

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

然后你的Javascript:

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

答案 1 :(得分:0)

感谢大家的帮助。对不起,我花了很长时间才回复。我真的很忙于其他学校。所以我设法用我的代码追查问题。这与我的观点有关。所有创建的删除表单都具有相同的ID。所以,如果我只是将记录ID添加到表单中。它工作得很好。