Laravel 5.6在foorloop中返回错误的ID

时间:2018-06-07 03:49:07

标签: php laravel for-loop laravel-5 laravel-5.6

在下面的循环中,我正在获取包并正常将其数据返回到卡中。一切正常,但如果我想通过他们的ID删除一个特定的包。例如,当我想删除ID为1的包时,它会删除包ID 4。我已经调试并发现它只是将错误的ID返回到URL。因此删除错误的对象。

@foreach($packages as $package)
                <div class="modal" tab index="-1" role="dialog"id="deleteModal">
                    <div class="modal-dialog" role="document">
                        <div class="modal-content">
                            <div class="modal-header">
                                <h5 class="modal-title">Confirmation</h5>
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                    <span aria-hidden="true">&times;</span>
                                </button>
                            </div>
                            <div class="modal-body">
                                <p class="text-center">Are you sure that you want to delete this package information ?</p>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-danger" data-dismiss="modal">No</button>
                                <a href="{{route('packages.new.delete',$package->id)}}" class="btn btn-success">
                                    Yes
                                </a>
                            </div>
                        </div>
                    </div>
                <div class="card mb-4" style="width: 80%;">
                    <div class="card-header">
                        <div class="row">
                            <div class="col-md-2">
                                <b>User: {{$package->user->name}}</b>
                            </div>

                            <div class="col-md-4">
                                <b>{{$package->created_at}}</b>
                            </div>

                            <div class="col-md-4">
                                <h6><b>#{{$package->packageID}}</b></h6>
                            </div>
                            <div class="col-md-1">
                                <a href="{{route('packages.status',$package->id)}}" class="btn btn-outline-info float-right mr-2">
                                    <i class="fa fa-clock"></i>
                                </a>
                            </div>
                            <div class="col-md-1">
                                <button type="button" class="btn btn-outline-info float-right mr-2"
                                        data-toggle="modal"
                                        data-target="#deleteModal">
                                    <i class="fa fa-trash"></i>
                                </button>
                            </div>
                        </div>
                    </div>
                    <div class="card-body">
                    <img class="float-left mr-3"  src="{{asset('images/defaultpackage.png')}}" style="width: 10%" alt="Card image cap">
                        <div class="row">
                            <div class="col-md-6">
                                <h5 class="card-title">{{$package->content}}</h5>
                                <p class="card-text text-muted">{{$package->instructions}}</p>
                                <a href="#" class="card-link">Card link</a>
                                <a href="#" class="card-link">Another link</a>
                            </div>

                            <div class="col-md-4">
                                <h5 class="card-title">Warehouse Info</h5>
                                <div class="card-text"><span class="text-muted">Courier Service:</span> <b>   {{$package->cn_courier}} </b><br>
                                    <span class="text-muted">Courier Tracking No.:</span> <b>   {{$package->cn_tracking_no}} <br>
                                        @if($package->pictures == 0 )
                                            <span class="text-muted">Image: No</span> <br>
                                        @elseif($package->pictures == 1)
                                            <span class="text-muted">Images:</span> <b>Yes </b><br>
                                        @endif

                                        <span class="text-muted">Pack:</span> <b>{{$package->pack->name}} <br>
                                            <span class="text-muted">Total Weight:</span>
                                            @if($package->weight == null)
                                                <b>
                                                    Unknown
                                                </b>
                                            @else
                                                {{$package->weight}} kg
                                            @endif
                                        </b>
                                    </b>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            @endforeach
            {{$packages->links()}}

3 个答案:

答案 0 :(得分:0)

<div class="modal" tab index="-1" role="dialog"id="deleteModal">

显示您正在通过此循环生成的HTML中创建重复的ID。

ID应该是每页唯一的。您可能需要在id中添加一些内容,以使这些卡中的每一个都是唯一的。

拥有重复的id会导致脚本以您期望的元素为目标,因为如果多个元素存在错误的id,则未定义哪个元素将被定位。

这很可能是“删除”的原因。定位错误的HTML元素。

答案 1 :(得分:0)

正如您所看到的,您正在使用循环来显示数据和操作按钮:

此处您没有唯一身份证明:id="deleteModal"模式

将唯一ID放在:id="deleteModal_'.$package->id.'"

和按钮data-target="#deleteModal_'.$package->id.'"

相同

注意:JS的ID是唯一的,所以永远不要重复使用

答案 2 :(得分:0)

您将模态窗口放入循环并生成多个模态。相反,将模态移动到循环外部以具有一个模态。循环让包列出它们(很可能是你做过)并使用id,name等数据属性,如<a data-id="{{ $package->id}}" data-name="{{ $package->name}}">

接下来,添加一个jQuery函数并在模态中使用id,name等。例如:

$('#deleteModal').on('show.bs.modal', function (event) {
  var button = $(event.relatedTarget)
  var id = button.data('id')
  var name = button.data('name')
  var action = $(this).find('form').attr('action')
  $(this).find('form').attr('action', action + '/' + id)
})