我想将用户查看的评论,帖子和个人资料保存在可见表中。帖子和评论以类似于社交网络的流形式显示。如何将数据存储在后台的可见表中?
表格:
viewables
user_id
viewable_id
viewable_type
例如,如果用户查看或看到流中的帖子,则数据库应存储user_id和post_id。评论和个人资料也应该如此。
编辑:
帖子在forelse循环中发布,评论在foreach中发布。
@forelse ($posts as $post)
@if ($post->type === 1)
{{$post->body}}
@foreach ($post->comments as $comment)
{!!$comment->body!!}
@endforeach
@elseif ($post->type === 2)
{{$post->image}}
@foreach ($post->comments as $comment)
{!!$comment->body!!}
@endforeach
@elseif ($post->type === 3)
show post with type 3
@elseif ($post->type === 4)
show post with type 4
@else
show remaining
@endforelse
答案 0 :(得分:1)
根据您的修改,有几种不同的处理方法。从技术上讲,由于所有帖子都包含在页面上,因此可以假定用户已阅读所有帖子,并在保存视图之前简单保存了所有已加载帖子的用户ID。
但是,如果您想要更精致的东西,则可以在滚动时使用ajax方法来发布用户ID,发布ID等,尽管我认为这不太实用,因为如果有人滚动过快。
最好的选择(无需用户交互)是一次加载几篇文章。滚动时自动(请参见this answer),或者在Laravel分页(https://laravel.com/docs/5.7/pagination)的帮助下,并在加载数据时设置用户ID。
示例:
$posts = Posts::paginate(5);
foreach($posts as $p) {
DB::table('viewables')->insert([
'user_id' => $user->id,
'viewble_id' => $p->id,
`viewable_type` => $p->type,
]);
}