Хранить представления в фоновом режиме в таблице - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу сохранить комментарии, сообщения и профили, которые пользователь просматривает в видимой таблице.Сообщения и комментарии отображаются в потоке, похожем на социальные сети.Как я могу сохранить данные в видимой таблице в фоновом режиме?

Таблица:

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 голосов
/ 29 сентября 2018

Основываясь на ваших изменениях, есть несколько разных способов справиться с этим.Технически, поскольку все посты включены на страницу, можно предположить, что пользователь прочитал их все и просто сохранил идентификатор пользователя для всех постов, загруженных перед передачей представления.

Если вы хотели чего-то большегоуточненный, однако, вы можете использовать ajax-метод для публикации идентификатора пользователя, идентификатора публикации и т. д. при прокрутке, хотя я не нахожу это очень практичным, поскольку это может вызвать проблемы, если кто-то просматривает слишком быстро.

Лучший вариант (не требующий взаимодействия с пользователем) - загружать пару сообщений одновременно.Либо автоматически при прокрутке (см. этот ответ ), либо с помощью нумерации страниц Laravel (https://laravel.com/docs/5.7/pagination) и установите идентификатор пользователя при загрузке данных.

Пример:

$posts = Posts::paginate(5);

foreach($posts as $p) {
    DB::table('viewables')->insert([
        'user_id' => $user->id,
        'viewble_id' => $p->id,
        `viewable_type` => $p->type,
    ]);
}
...