我正在尝试按ID和用户ID删除评论,但不会删除,只是页面加载而没有任何更改。
但是,如果有一条评论已被成功删除, 如果评论之间有更多评论,则不会删除任何内容。 请帮忙。
public function commntdestroy($id)
{
Replies::where(['id' => $id, 'user_id' => Auth::id()])->delete();
return redirect()->back();
}
路线:
Route::delete('commentdestroy/{id}','StaffContractsController@commntdestroy');
我尝试:
public function commntdestroy($id)
{
$user_id = Auth::user();
$replys=Replies::where('id', $id)
->where('user_id',$user_id);
$replys->delete();
return redirect()->back();
}
刀片:
<form action="{{url('commentdestroy', $reply->id)}}" method="post">
@csrf
@method('DELETE')
<h4 class="modal-title">Delete your Comment</h4>
<button class="btn btn-custon-four btn-danger" type="submit">Delete</button>
</form>
答案 0 :(得分:1)
首先,您需要输入ID,而不是整个用户对象
其次,您只需要通过调用first()
来获取它,因为您只想获取1个数据
public function commntdestroy($id)
{
$user_id = Auth::user(); // wrong here
$replys=Replies::where('id', $id)
->where('user_id',$user_id); // wrong here
$replys->delete();
return redirect()->back();
}
正确的应该是
public function commntdestroy($id)
{
$user_id = Auth::id(); //
$replys=Replies::where('id', $id)
->where('user_id',$user_id)->first(); // you need to fetch the data
//wrap if statement to check data exist or not
if(!is_null($reply)){
//execute if exist
$replys->delete();
}
return redirect()->back();
}
以及需要在函数或变量上使用更好的命名约定的另一条建议。
答案 1 :(得分:1)
第二个commentdestroy()
函数存在一些问题。它正在获取漏洞用户对象,但您根本不需要。您应该使用Auth::id()
或更长的时间Auth::user()->id
。另外,我更喜欢在使用表单操作时使用命名路由。您可以尝试这样的事情:
Route::delete('commentdestroy/{id}','StaffContractsController@commntdestroy')->name('comment.destroy');
<form action="{{ route('comment.destroy', $reply->id) }}" method="post">
@csrf
@method('DELETE')
<h4 class="modal-title">Delete your Comment</h4>
<button class="btn btn-custon-four btn-danger" type="submit">Delete</button>
</form>
其他人看起来不错,但第一个commentdestroy()
函数看起来更干净。
答案 2 :(得分:1)
据我了解,您想删除一个评论。发表评论的人只能将其删除。在这种情况下,您的方法应类似于仅对当前登录用户创建的注释显示“删除”按钮。在目前的方法中,您可以像下面这样:
public function commntdestroy($id)
{
$reply = Replies::where([
['id',$id],
['user_id',Auth::id()]
])->first();
if ($reply) {
$reply->delete();
}
return redirect()->back();
}
您应使用单数形式的命名路径和模型名称。