Laravel表单用于删除不正确的记录ID

时间:2018-06-10 17:36:26

标签: laravel

我在索引视图中有两个按钮(编辑和删除),我可以正确编辑记录但是当我删除记录时,laravel表单会删除另一个记录的id。

这是观点:

<div class="row">
                    @if(App\Player::count()>0)
                      @foreach($players as $player)
                        <div class="col-lg-3 col-md-6">
                            <div class="thumbnail no-padding">
                                <div class="thumb">
                                    <img src="/cricket/storage/images/players/{{ $player->photo }}" alt="">
                                    <div class="caption-overflow">
                                        <span>
                                            <a href="/cricket/storage/images/players/{{ $player->photo }}" class="btn bg-success-400 btn-icon btn-xs" data-popup="lightbox"><i class="icon-plus2"></i></a>
                                            <a href="user_pages_profile.html" class="btn bg-success-400 btn-icon btn-xs"><i class="icon-link"></i></a>
                                        </span>
                                    </div>
                                </div>

                                <div class="caption text-center">
                                    <h6 class="text-semibold no-margin">{{ $player->name }}</h6>
                                    <ul class="icons-list mt-15">

                                        <li><a href="{{ route('players.edit', $player->id) }}" data-popup="tooltip" title="Edit" data-container="body"><i class="fa fa-pencil"></i></a></li>
                                        <li></li><li></li><li></li>

                                        <li>

                                        {!! Form::open(['id' => 'p', 'method' => 'DELETE', 'route' => ['players.destroy', $player->id]]) !!}

                                        <a href="javascript:{}" onclick="document.getElementById('p').submit();" data-popup="tooltip" title="Delete" data-container="body"><i class="fa fa-trash"></i></a>

                                        {!! Form::close() !!}
                                        </li>

                                    </ul>
                                </div>
                            </div>
                        </div>
                    @endforeach
                  @endif

                </div>  

这是删除方法:

public function destroy($id)
{

    $record = Player::find($id);
    $filename = $record->photo;   

    if(Storage::exists('players/' . $filename))
    {
        Storage::delete($filename);
        //return "yyy";
    }

    $record->delete();

    Session::flash('success', 'The record was successfully deleted.');

    return redirect()->route('players.index');
}  

我添加了一个文本字段并显示了记录的ID,其中显示了正确的ID,如下面的屏幕截图,但是当我提交表单进行删除时,它的ID不正确:
ID 9

当我从delete方法显示ID时,它显示5而不是9:

public function destroy($id)
{

    return $id;
}  

上面的代码返回5,这是不正确的,它应该返回9,下面是return语句的结果:

ID 5

我不知道这里出了什么问题 提前感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

您的代码似乎很好,

你能尝试通过这样的查询删除记录,

$record = Player::where('id', $id)->first();
...
$record->delete();

我希望它会起作用

答案 1 :(得分:0)

我认为问题出在你的html / javascript中。如果你简化它,你的表单生成基本上就是这样:

@foreach($players as $player)
    {!! Form::open(['id' => 'p', 'method' => 'DELETE', 'route' => ['players.destroy', $player->id]]) !!}
    <a href="javascript:{}" onclick="document.getElementById('p').submit();" data-popup="tooltip" title="Delete" data-container="body"><i class="fa fa-trash"></i></a>
    {!! Form::close() !!}
@endforeach

每个玩家表单获得相同的ID(&#34; p&#34;),因为您在foreach循环中生成表单。我认为发生的事情是,javascript只选择第一个表单,而不是您要提交的表单,因为您的ID不再是唯一的。

一种可能的解决方案是在表单ID中添加某种枚举器(例如p-{{ $player->id }}),或者找到一种不同的方式来选择要提交的正确表单,例如:搜索按钮的父窗体。

答案 2 :(得分:0)

{!! Form::open(['class' => 'p', 'method' => 'DELETE', 'route' => ['players.destroy', $player->id]]) !!}

我遇到了同样的问题,但是在将id更改为class后,它仍然有效

答案 3 :(得分:0)

确保每个记录的“ p”是唯一的。您可以通过将玩家ID与其串联来实现。

@foreach($players as $player)
    {!! Form::open(['id{{$player->id}}' => 'p', 'method' => 'DELETE', 'route' => ['players.destroy', $player->id]]) !!}
    <a href="javascript:{}" onclick="document.getElementById('p{{$player->id}}').submit();" data-popup="tooltip" title="Delete" data-container="body"><i class="fa fa-trash"></i></a>
    {!! Form::close() !!}
@endforeach