Laravel - 删除方法不存在

问题描述 投票:0回答:12

我收到错误:

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
:错误消失了,但没有删除任何内容..

php laravel
12个回答
30
投票
这是你的代码。

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

只需在删除之前添加

->each()

,就像这样,

$post->each->delete();

这对我有用。


18
投票
删除 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,因此 addd :

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

3
投票
使用

->first() 而不是 ->get()

您无法使用

delete() 删除整个集合


2
投票

get

更改为
first
,然后检查该帖子是否属于该用户。

public function destroy($id) { $post = Post::where('id', $id)->first(); if($post && $post->user_id == \Auth::user()->id){ $post->delete(); return view('/home'); }else{ abort(404); } }
    

0
投票
控制器:

public function destroy($id) { $post = Post::find($id); $post->delete(); //redirect to return redirect()->back(); }

查看:

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

试试这个。

希望您使用

创建了控制器

--资源

旗帜。


0
投票
由于帖子ID是

posts

表的主键,您可以直接从表中删除,
不需要
user_id


要从 Auth 外观获取 user_id,您应该使用,

$user_id = Auth::id();

只有传递 id 才可以工作,

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

但是,如果您知道模型的主键,则可以通过调用

destroy

 方法删除模型而不检索它。除了单个主键作为其参数之外,
destroy
方法还接受多个主键、主键数组或主键的
集合

Post::destroy($id)
    

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'); }
    

0
投票
这就是我如何删除表中一个(或多个)关联记录的方法:

RFIResponseFile::where('rfi_response_id',$response_id)->delete();
    

0
投票
Post::where('id', $id)->where('user_id',$user_id)->delete();
或者

$post= Post::where('id', $id)->where('user_id',$user_id); if($post->get()->count()){ $post->delete(); }
    

0
投票
您想要删除一个对象,但在查询中调用集合。 尝试这样做。

public function destroy($id) { $user_id = Auth::user(); $post= Post::where('id', $id)->where('user_id',$user_id)->first(); $post->delete(); return view('/home', [ 'posts' => $post ]); }
    

-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 ]); }
    

-1
投票
只需将其添加到视图顶部,我也遇到了像你一样的错误,现在已解决,抱歉英语不好。

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

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

在底部

用于控制器

$post = Post::find($id); $post->delete(); Session::flash('success', 'Menu was successfully deleted!'); return redirect()->route('posts.index');
    
© www.soinside.com 2019 - 2024. All rights reserved.