【问题标题】:add likes to post (laravel)添加喜欢的帖子(laravel)
【发布时间】:2019-09-17 22:00:09
【问题描述】:

我有一个用 laravel 构建的 博客。 我想在我的帖子添加喜欢。 所以我用likes 表创建了一个Like 模型。

这就是我在Like 中所做的模型

    public function post(){
        return $this->belongsTo(Post::class);
    }
    public function user(){
        return $this->belongsTo(User::class);
    }

在我的 PostUser 模型中

    public function likes(){
        return $this->hasMany(Like::class);
    }

以及我的 likes 表的迁移文件


        Schema::create('likes', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->foreign('post_id')->references('id')->on('posts');
            $table->foreign('user_id')->references('id')->on('users');
            $table->boolean('value');
            $table->timestamps();
        });

我想以这种方式在我的控制器中设置值!

public function liker($postID, $userID, $value){
        $like = new Like([
            'post_id' => $postID,
            'user_id' => $userID,
            'value' => $value
        ]);
        $like->save();
        return redirect()->back();
    }

但视图返回 419 错误页面。 (页面已过期)

并且没有任何更改(无行)添加到我的数据库(喜欢表)! 你能帮帮我吗?

【问题讨论】:

    标签: php laravel backend


    【解决方案1】:

    您不需要value 点赞,如果它存在,它就是“点赞”,您应该使用 is 作为数据透视表(您已经有 2 个外国 ID)

    Schema::create('likes', function (Blueprint $table) {
        $table->unsignedInteger('post_id');
        $table->unsignedInteger('user_id');
        $table->foreign('post_id')->references('id')->on('posts');
        $table->foreign('user_id')->references('id')->on('users');
        $table->tinyInteger('is_dislike')->default(0);
        $table->timestamps();
    });
    

    然后声明PostUser之间的关系

    发帖

    public function votedUsers(){ //or simply likes
        return $this->belongsToMany(User::class, 'likes')->withPivot('is_dislike')->withTimestamps();
    }
    

    用户

    public function votedPosts(){
        return $this->belongsToMany(Post::class, 'likes')->withPivot('is_dislike')->withTimestamps();
    }
    

    接下来要创建一个like 就这样做

    public function liker($postId, $userId, $value){
        $user = User::findOrFail($userId); //or use auth()->user(); if it's the authenticated user
        $user->votedPosts()->attach($postId);
        return redirect()->back();
    }
    

    要删除类似的,请改用detach($postId)

    不喜欢

    $user->votedPosts()->attach($postId, ['is_dislike' => 1]);
    

    【讨论】:

    • 谢谢你的时间,顺便说一句,我想要喜欢或不喜欢的值('1' 表示喜欢,'0' 表示不喜欢)所以你认为我应该寻找更好的方法来添加不喜欢?
    • 在这种情况下,是的,您需要一个字段。更新了我的答案。您会注意到,在这种结构中,您不能两次喜欢同一个帖子,也不能同时“喜欢”和“不喜欢”一个帖子。
    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2020-11-23
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多