我收到了错误:
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
:错误已消失,但没有任何内容被删除..
答案 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');