在 laravel 中对数据数组进行分页并在 vuejs 中使用无限滚动的最佳方法

Posted

技术标签:

【中文标题】在 laravel 中对数据数组进行分页并在 vuejs 中使用无限滚动的最佳方法【英文标题】:Best way to paginate an array of data in laravel and use infinite scroll with vuejs 【发布时间】:2019-04-24 22:25:29 【问题描述】:

请有人帮助我, 我有一个数据数组(该数组包含登录用户的帖子和登录用户朋友的帖子:也就是说,如果我登录,它将获取我的帖子和我的朋友的帖子),这个数组获取所有帖子所以如果我有 100 个朋友并且我的每个朋友都有 30 个帖子,我将获取 300 个帖子,我想对获取的数据进行分页并从数组中获取 5 个帖子,当用户向下滚动页面时获取更多 我正在使用 laravel 和 vuejs 来显示数据,请问最好的实现方式是什么,检查我已经编写的代码

public function feeds()

    $friends = Auth::user()->friends();

    $feed = array();

    foreach ($friends as $friend):

        foreach ($friend->posts as $post):

            array_push($feed, $post);

        endforeach;

    endforeach;


    foreach (Auth::user()->posts as $post):

        array_push($feed, $post);

    endforeach;

    usort($feed, function($p1, $p2)
        return $p1->id < $p2->id;
    );

    return $feed;

vuejs

get_feed()

    this.loading = true;
    axios.get('/feed').then((response) => 
        this.loading = true;
        response.data.forEach((post) => 
        this.$store.commit('add_post', post)
            this.loading = false;
        )
    )
 
computed: 
    posts() 
        return this.$store.getters.all_posts
    ,

【问题讨论】:

【参考方案1】:

这里有一个更快的版本来检索帖子。

public function feeds()
    $userdIds = Auth::user()->friends()->pluck('id')->toArray();
    $userIds[] = Auth::id();

    $feed = Post::whereIn('user_id', $userIds)->orderBy('id', 'desc')->paginate(10);
    return $feed; 

【讨论】:

非常感谢,虽然它可以工作,但稍加修改就可以工作【参考方案2】:

感谢 N69S 我终于想到了这个

    public function feeds()
    $userIds = Auth::user()->friends_id();
    array_push($userIds, Auth::id());

    $feed = Posts::whereIn('user_id', $userIds)->orderBy('id', 'desc')->paginate(5);
    return $feed;

【讨论】:

以上是关于在 laravel 中对数据数组进行分页并在 vuejs 中使用无限滚动的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在laravel api中对关系资源进行分页

向 IQueryable 添加扩展方法,该方法对列表进行分页并在从 API 控制器方法返回时返回 json 对象

如何在 laravel&Vue 中对数据进行分页?

如何使用猫鼬和EJS实现分页并在分页时保留搜索查询?

如何在 Laravel 5 中对合并的集合进行分页?

在 Laravel 中对分页变量进行排序