Laravel - 方法删除不存在

时间:2017-05-10 18:01:12

标签: php laravel

我收到了错误:

  

Macroable.php第74行中的BadMethodCallException:删除方法   不存在。

路线:

Route::resource('posts', 'PostController');

我的控制器:

public function destroy($id)
{
    $user_id = Auth::user();
    $post= Post::where('id', $id)->where('user_id',$user_id)->get();
    $post->delete();

    return view('/home', [
        'posts' => $post
    ]);
}

查看:

  <form action="{{ route('posts.destroy', '$post->id') }}" method="post">
  <input type="hidden" name="_method" value="DELETE" />
      {{ csrf_field() }}
       {{ method_field('DELETE') }}

   <input type="submit" class="btn btn-danger" value="delete" />
  </form>

我尝试将method="post"更改为delete:错误已消失,但没有任何内容被删除..

9 个答案:

答案 0 :(得分:7)

删除get(),它将起作用

$post= Post::where('id', $id)->where('user_id',$user_id);
$post->delete();

If you want to delete first document you can use : 

$post= Post::where('id', $id)->where('user_id',$user_id)->first();
    $post->delete();

但是,您总是需要检查$ post是否被查找为查询文档,或者是否为null,因此添加:

if($post){
$post->delete();
}

答案 1 :(得分:2)

这是您的代码。

$user_id = Auth::user();
$post= Post::where('id', $id)->where('user_id',$user_id)->get();
$post->delete();

只需在删除之前添加->each()

$post->each->delete();

这对我有用。

答案 2 :(得分:1)

更改get的{​​{1}},然后检查帖子是否属于该用户。

first

答案 3 :(得分:0)

控制器:

{!! Form::open(['method' => 'DELETE','route' => ['posts.destroy', $post->id],'style'=>'display:inline']) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}

视图:

Failed to connect to host(s): [X.X.X.X:3000]; error: Connecting to the cluster timed out.

试试这个。

希望您使用

创建控制器
  

- 资源

标记。

答案 4 :(得分:0)

使用-> first()代替-> get()

您不能使用 delete()

删除整个收藏集

答案 5 :(得分:0)

请尝试以下操作:

public function destroy($id)
{
    $userId = Auth::user()->id;
    $post = Post::where([
                    'id' => $id,
                    'user_id' => $userId

            ])->delete();

    Session::flash('success', 'Post was successfully deleted!');
    return redirect()->route('posts.index');
}

答案 6 :(得分:0)

由于帖子ID是posts表的主键,因此可以直接从表中删除,
不需要user_id

要从Auth Facade中获取user_id,您应该使用

$user_id = Auth::id();

只有通过传递ID才能起作用,

Post::find($id)->delete()

但是,如果您知道模型的主键,则可以通过调用destroy方法来删除模型而无需检索它。除了以单个主键作为参数外,destroy方法还将接受多个主键,一个主键数组或一个collection个主键:

Post::destroy($id)

答案 7 :(得分:-1)

在您的控制器中

  

更改代码之前

public function destroy($id)
{
    $user_id = Auth::user();
    $post= Post::where('id', $id)->where('user_id',$user_id)->get();
    $post->delete();

    return view('/home', [
        'posts' => $post
    ]);
}
  

更改代码后

    public function destroy($id)
    {
        $user_id = Auth::user();
        $post= Post::where(['id'=>$id,'user_id'=>$user_id])->get();
               Post::where(['id'=>$id,'user_id'=>$user_id])->delete();

        return view('/home', [
            'posts' => $post
        ]);
    }

答案 8 :(得分:-1)

只需将其添加到视图之上,我就像你一样错误,现在已经解决了,抱歉英语不好。

 {!! Form::model($post, ['route' => ['posts.destroy', $post->id], 'method' => 'DELETE']) !!}

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

在底部

for controller

$post = Post::find($id);
$post->delete();

Session::flash('success', 'Menu was successfully deleted!');
return redirect()->route('posts.index');