aneeskhan47/laravel-pagination-merge

合并多个 Laravel 分页实例

v1.0.6 2024-03-23 10:28 UTC

This package is auto-updated.

Last update: 2024-09-23 11:32:46 UTC


README

Laravel 5/6/7/8/9/10/11 的分页合并

Latest Version on Packagist Total Downloads GitHub Code Style Action Status Laravel Versions

一个简单的 Laravel 分页合并包,允许您合并多个 ->paginate() 实例。

一些背景

在我工作的一个项目中,我必须处理类似的事情,在一个页面上,我必须显示两种类型的分页并按 created_at 字段排序的出版物。在我的情况下,这是一个 帖子 模型和 事件 模型(以下简称为出版物)。

唯一的区别是我不想从数据库中获取所有出版物,然后合并并排序结果,正如您所想象的,如果我们有数百个出版物,这将引发性能问题。

因此,我想到了一个更方便的方法,即分别对每个模型进行分页,然后合并并排序。这就是我建立这个包的原因。

这个包受到了这个 StackOverflow 答案 的极大启发。

⚡️ 安装

Laravel 5.5+

使用 Composer 安装此包

composer require aneeskhan47/laravel-pagination-merge

服务提供者将自动发现。您无需将其添加到任何地方。

Laravel 5.0 到 5.4

使用 Composer 安装此包

composer require aneeskhan47/laravel-pagination-merge

config/app.php 中找到 providers 键并注册 PaginationMerge 服务提供者。

'providers' => [
    // ...
    Aneeskhan47\PaginationMerge\PaginationMergeServiceProvider::class,
]

config/app.php 中找到 aliases 键并注册 PaginationMerge 别名。

'aliases' => [
    // ...
    'PaginationMerge' => Aneeskhan47\PaginationMerge\Facades\PaginationMerge::class,
]

🚀 使用

use App\Models\Post;
use App\Models\Event;
use Aneeskhan47\PaginationMerge\Facades\PaginationMerge;


class PublicationsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $events = Event::latest()->paginate(5);
        $posts = Post::latest()->paginate(5);

        $publications = PaginationMerge::merge($events, $posts)
                                       ->sortByDesc('created_at')
                                       ->get();

        // since get() will return \Illuminate\Pagination\LengthAwarePaginator
        // you can continue using paginator methods like these etc:

        $publications->withPath('/admin/users')
                     ->appends(['sort' => 'votes'])
                     ->withQueryString()
                     ->fragment('users')
                     ->setPageName('publications_page');

        return view('publications.index', compact('publications'));
    }
}

💰 支持开发

你喜欢这个包吗?通过捐赠来支持它

🧪 测试

composer test

📝 变更日志

请参阅 CHANGELOG 了解最近更改的更多信息。

🤝 贡献

请参阅 CONTRIBUTING 了解详细信息。

🔒 安全性

如果您发现任何与安全相关的问题,请通过电子邮件 kingkhan2388@gmail.com 而不是使用问题跟踪器。

🙌 致谢

📜 许可证

MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。

🔧 Laravel 包模板

此包是使用 Laravel 包模板 生成的。