如何从Laravel列表中删除某个对象?

时间:2015-05-15 12:30:28

标签: php laravel laravel-4 laravel-5

我有一个订阅者表:

enter image description here

当我点击删除时,btn会带一个模式进行确认:

enter image description here

我非常接近,但是当我点击删除时,即使我没有按下最后一个删除 btn,它也会删除列表中的最后一个。

我知道我必须在某个地方使用{!! Form::hidden('$id', $subscribe->id)!!},我不知道应该在哪里放置它。

<?php $x = 0; ?>

<div class="container">
    <div class="row">

        <a href="subscribe/create" class="btn btn-sm btn-success "> <span class="fa fa-plus"></span> Create </a><br><br>

        <table class="table">
            {{--Table Header--}}
            <thead class="thin-border-bottom">
                <th width="50" >#</th>
                <th width="200" >Email</th>
                <th width="100" >Subscribe On </th>
                <th width="100" >Delete </th>
            </thead>

            {{--Table Body--}}
            <tbody>


                <tr>
                    @foreach( $subscribes as $subscribe)

                    <?php $x = $x+1; ?>

                    <td>{{ $x }}</td>
                    <td>{{ $subscribe->email or '' }}</td>
                    <td>{{ $subscribe->created_at or '' }}</td>



                    <td><a data-toggle="modal" data-target="#delete_subscriber" type="button" class="btn btn-danger btn-xs">Delete</a></td>

                </tr>

                @endforeach

            </tbody>
        </table>

    </div>
</div>

模态

<div class="modal fade" id="delete_subscriber" tabindex="-1" role="dialog" aria-labelledby="edit" aria-hidden="true">
    <div class=" col-lg-5"> </div>
    <div class=" center col-lg-2">
        {!! Form::model($subscribe, array( 'route' => array('subscribe.destroy', $subscribe->id),'method' => 'DELETE')) !!}

        <hr style="height:300pt; visibility:hidden;" />

        {!! Form::submit ('Delete This Subscriber', array('class'=> 'btn btn-danger btn-lg btn-block', 'data-rel'=>"tooltip" , 'title'=>"Are you sure ?", 'data-placement'=>"top"))!!}<br><br>

        <button data-rel="tooltip"  title="Go Back" data-placement="bottom"  type="button" class="btn btn-primary btn-lg btn-block" class="close" data-dismiss="modal" > Cancel </button> <br>

        {!! Form::hidden('$id', $subscribe->id)!!}

        {!! Form::close()!!}

    </div>
</div>

有人可以告诉我,我该如何删除正确的?

如何停止我的应用程序删除列表中的最后一个对象?

控制器

public function destroy($id){

    $subscribe = Subscribe::find($id);

    $subscribe->delete();

    return Redirect::to('subscribe')
    ->with('success','The web directory was deleted succesfully!');

}

4 个答案:

答案 0 :(得分:1)

只是改变这样,但检查可能我错过路线路径,并添加您的确认弹出窗口

查看 将此代码放在foreach循环中,为每个行和行项id

生成删除按钮
<td>
{!! Form::open(array('url' => 'subscribe/' . $subscribe->id)) !!}
   {!! Form::hidden('_method', 'DELETE') !!}
   {!! Form::submit('DELETE', array('class' => 'btn btn-danger')) !!}
{!! Form::close() !!}
</td>

控制器删除操作

public function destroy($id)
    {
        $subscribe= subscribe::subscribe($id);
        $subscribe->delete();    
        return redirect('subscribe')->with(['flash_message' => 'successful delete!']);
    }

答案 1 :(得分:1)

我有同样的问题,因为我匆忙,我不得不通过在视图中为foreach循环内的每条记录创建一个新模态来绕过这个问题。我不认为这是一个复杂的解决方案,但在我的情况下,我期望由于分页的少量记录,它工作正常。我想你可以使用Jquery来操作每次点击的模态动作,但我无法使它工作。希望它有所帮助

答案 2 :(得分:1)

每次按下删除按钮时,您需要在删除表单中动态设置id,以便知道要删除哪一个。

在打开模态的链接上,添加一个onclick属性来处理这个问题。这应该适合你。

<td><a data-toggle="modal" data-target="#delete_subscriber" type="button" class="btn btn-danger btn-xs" onclick="$('#delete_subscriber').find('input[type=hidden]').val({{ $subscribe->id }})">Delete</a></td>

答案 3 :(得分:0)

你只需要在modal中使用一个在Controller @ destroy中引用的表单,将它显示为内联样式以在laravel 5.2中包含一个按钮提交,并使用method_field('DELETE')和crsf_field()添加你的引导类或css:

          <form action="{{ action('UsersController@destroy', $user->id)}}" method="POST" style="display:inline;">
        <button class="btn btn-danger btn-xs" onclick="return confirm('¿Seguro que deseas eliminar?')">
          <span class="glyphicon glyphicon-remove-sign" aria-hidden="true"></span>
        </button>
        {{ method_field('DELETE') }}
        {{ csrf_field() }}
      </form>

控制器没有变化:

    public function destroy($id)
{
    $user= user::find($id);
    $user-> delete();
    return redirect()->route('admin.users.index');
}