Php 使用Laravel创建或更新

Php 使用Laravel创建或更新,php,database,laravel,eloquent,Php,Database,Laravel,Eloquent,我正在制作一个网站,用户可以发布和阅读彼此的帖子。 我想让所有用户都能标记他们读过的文章,从而只显示未读的文章。也可以撤消此操作。因此,我为用户和帖子提供了一个模型和表格 我的想法是创建一个PostsRead表,其中包含用户和帖子的唯一id。然后,我可以获取所有帖子,并从PostsRead表中删除这些帖子。因此,问题是: 1) 这是一个好的(最佳实践)方法吗 2) 怎么做?我想我需要检查PostsRead表中是否有包含user\u id/post\u id对的记录。如果不是,请插入新行。如果是,

我正在制作一个网站,用户可以发布和阅读彼此的帖子。 我想让所有用户都能标记他们读过的文章,从而只显示未读的文章。也可以撤消此操作。因此,我为用户和帖子提供了一个模型和表格

我的想法是创建一个PostsRead表,其中包含用户和帖子的唯一id。然后,我可以获取所有帖子,并从PostsRead表中删除这些帖子。因此,问题是:

1) 这是一个好的(最佳实践)方法吗

2) 怎么做?我想我需要检查PostsRead表中是否有包含user\u id/post\u id对的记录。如果不是,请插入新行。如果是,我想我需要更新当前行。它应该有一个布尔字段,告诉你文章是否被读取。这方面的代码是什么


当我在脑海中思考时,这种方法似乎……很奇怪。我走错方向了吗?我希望这个问题可以理解。

是的,这样做是最好的做法

创建一个名为“user\u read”的表,其中包含“user\u id”和“post\u id”(两者都作为主键)

要设置它,您应该在模型中具有此关系

User.php

public function reads()
{
    return $this->belongsToMany(Post::class, 'user_read', 'user_id', 'post_id')
           ->withTimestamps();
}
要存储用户阅读的新帖子,您只需执行以下操作

//1 and 3 are the posts ids
$user->reads()->sync([1, 3]);
//1 and 3 are the posts ids
$user->reads()->sync([1, 3]);