【问题标题】:Store views in background into the table将后台视图存储到表中
【发布时间】:2018-09-29 05:35:09
【问题描述】:

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

表:

viewables
    user_id
    viewable_id
    viewable_type

例如,如果用户查看或看到流中的帖子,则数据库应存储 user_id 和 post_id。 cmets 和配置文件应该也可以。

编辑:

帖子在 forelse 循环中发布,而 cmets 在 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

【问题讨论】:

  • 你的意思是查看?你有每个评论的链接吗?当用户点击查看视图/评论时可能会触发 ajax 事件
  • 不,我没有额外的意见。例如,如果用户查看或看到流中的帖子,则数据库应存储 user_id 和 post_id。 cmets 和配置文件应该也可以。
  • 所以您要保存阅读帖子的人的用户 ID?需要更多关于如何设置帖子视图的信息。
  • @JPark 我在帖子中添加了一个示例视图

标签: laravel view store


【解决方案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,
    ]);
}

【讨论】:

  • 感谢您的回答。例如,如果加载了 10 个帖子并且用户仅阅读了 2 个帖子,则每 10 个帖子保存为已阅读。我认为这不是一个好的解决方案。
  • 嗯,它并非没有缺点。理想情况下,您应该有一种方法让用户点击阅读帖子以存储准确的计数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 2014-06-12
  • 1970-01-01
  • 2013-05-08
  • 2021-10-27
  • 2020-07-21
相关资源
最近更新 更多