将背景视图存储到表中

时间:2018-09-27 19:36:52

标签: laravel view store

我想将用户查看的评论,帖子和个人资料保存在可见表中。帖子和评论以类似于社交网络的流形式显示。如何将数据存储在后台的可见表中?

表格:

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

1 个答案:

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