在AJAX调用中雄辩地不从数据库中删除记录

时间:2016-06-15 06:10:45

标签: ajax laravel eloquent

我正在尝试为帖子实现一个“喜欢”的系统,CSS有一个动画按钮,通过帖子有三个AJAX调用。

  1. 将检查帖子是否已被喜欢,并将某个样式应用于按钮。
  2. 如果用户点击按钮,则会在表格中添加记录。
  3. 如果用户再次点击该记录,将会删除该记录。
  4. AJAX代码:

    $(document).ready(function() {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    
    $.ajax({
        url : '/like/alreadyLiked',
        method : 'POST',
        dataType : 'json',
        data : {
            slug : '{{Request::segment(2)}}',
            user_id : '{{Auth::user()->user_id}}'
        },
        success : function (data) {
            if(data.display === true){
                $('#likelink').attr('class', 'like active')
            }else{
                $('#likelink').attr('class', 'like');
            }
        }
    });
    
    if($('#likelink').hasClass('like') && $('#likelink')[0].classList.length == 1){
        $('#likelink').on('click', function(e){
            e.preventDefault();
            $.ajax({
                url : '/like',
                method : 'POST',
                dataType : 'json',
                data : {
                    slug : '{{Request::segment(2)}}',
                    user_id : '{{Auth::user()->user_id}}'
                },
                success : function(data){
                    if(data.display === true){
                        $('#likelink').attr('class', 'like');
                    }
                }
            });
    
        });
    }else{
        $('#likelink').on('click', function(e){
            e.preventDefault();
            $.ajax({
                url : '/dislike',
                method : 'POST',
                dataType : 'json',
                data : {
                    slug : '{{Request::segment(2)}}',
                    user_id : '{{Auth::user()->user_id}}'
                },
                success : function(data){
                    if(data.display === true){
                        $('#likelink').attr('class', 'like');
                    }
                }
            });
    
        });
    
    }
    });
    

    PHP(Laravel代码):

        public function hasHeAlreadyLikedThisPost()
    {
      if(request()->ajax()){
          $post = Post::where('slug', '=', request()->input('slug'))->first();
          $post_id = $post->post_id;
          $like = Like::where(['user_id' => request()->input('user_id'), 'post_id' => $post_id])->first();
          if($like != null){
            return response()->json(['display' => true]);
          }else{
            return response()->json(['display' => false]);
          }
      }
    }
    
    public function addLike()
    {
      if(request()->ajax()){
        $slug = request()->input('slug');
        $user_id = request()->input('user_id');
    
        $post = Post::where('slug', '=', $slug)->first();
    
        $like = Like::create(array(
          'user_id' => $user_id,
          'post_id' => $post->post_id
        ));
    
        if($like->exists){
          return response()->json(['display' => true]);
        }else{
          return response()->json(['display' => false]);
        }
      }
    
    }
    
    public function dislike()
    {
      $slug = request()->input('slug');
      $user_id = request()->input('user_id');
      $post = Post::where('slug', '=', $slug)->first();
      $like = Like::where(['post_id' => $post->post_id, 'user_id' => $user_id])->delete();
      return response()->json(['display' => false]);
    }
    

    问题是“检查”和“插入”调用有效,但“删除”调用没有。在任何情况下,它都会向数据库添加一条新记录,并且不会改变样式。

2 个答案:

答案 0 :(得分:0)

我认为您忘记先拨打(或获取)

$like = Like::where(['post_id' => $post->post_id, 'user_id' => $user_id])->first()->delete();

where()返回一个查询,但删除似乎对eloquent模型对象起作用。因此,要从查询中获取模型对象,以便调用first()(就像之前所做的那样),或者get()获取一个数组并遍历它,在每个

上应用delete()

答案 1 :(得分:0)

尝试添加

$(document).on('click', '#likelink', function(e)

而不是$('#likelink').on('click', function(e)