我在索引视图中有两个按钮(编辑和删除),我可以正确编辑记录但是当我删除记录时,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不正确:
当我从delete方法显示ID时,它显示5而不是9:
public function destroy($id)
{
return $id;
}
上面的代码返回5,这是不正确的,它应该返回9,下面是return语句的结果:
我不知道这里出了什么问题 提前感谢任何帮助。
答案 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