laravel-按ID和用户ID删除评论不起作用

时间:2019-08-31 09:36:10

标签: laravel

我正在尝试按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>

3 个答案:

答案 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();
    }
  

您应使用单数形式的命名路径和模型名称。