Laravel Multiple Pagination在一页中

Mel*_*ans 34 php pagination laravel

我的分页遇到了一些麻烦.我有两个表来自数据库中的数据,我用laravel Paginator对它进行了分页.

现在我的问题是当你去,例如,第2页它添加?page = 2但这使第一个表也转到第2页.

反正有没有得到这样的东西?

page_table1={number}&page_table2={number}

所以你不要在其他表上应用页面更改.

ano*_*nym 39

$publishedArticles = Article::paginate(10, ['*'], 'published');
$unpublishedArticles = Article::paginate(10, ['*'], 'unpublished');
Run Code Online (Sandbox Code Playgroud)

第三个参数使用如下:

laravel /公/文章?发表= 3

laravel /公/文章?未公布= 1

  • 非常好的解决方案,特别是在使用分页而不直接从相关模型的视图中准备时,假设客户,模型有许多产品,`@foreach ($customer->products()->paginate(10,['*'] ,'anotherPageParam') as $product)` 然后对于链接,`{!! $customer->products()->paginate(10,['*'],'anotherPageParam')->links() !!}` (2认同)

daV*_*aVe 26

这是我在Laravel 4上找到的一个简单的解决方案.

调节器

在创建分页器之前更改页面名称:

Paginator::setPageName('page_a');
$collection_A = ModelA::paginate(10);

Paginator::setPageName('page_b');
$collection_B = ModelB::paginate(10);
Run Code Online (Sandbox Code Playgroud)

视图

执行相同操作:在打印链接之前更改页面名称

Paginator::setPageName('page_a');
$collection_A->links();

Paginator::setPageName('page_b');
$collection_B->links();
Run Code Online (Sandbox Code Playgroud)

如果您不希望在导航到其他页面时丢失任何页面状态,请将链接附加到所有集合的当前页面:

Paginator::setPageName('page_a');
$collection_A->appends('page_b', Input::get('page_b',1))->links();

Paginator::setPageName('page_b');
$collection_B->appends('page_a', Input::get('page_a',1))->links();
Run Code Online (Sandbox Code Playgroud)


Dam*_*rsy 21

不幸的是我现在无法测试这段代码,但浏览文档和代码(in Illuminate/Pagination/Environment)我想你可能会这样:

# use default 'page' for this
$collection1 = Model::paginate(20);

# use custom 'other_page' for this
$collection2 = Model2::paginate(20);
$collection2->setPageName('other_page');
Run Code Online (Sandbox Code Playgroud)

setPageName()方法没有记录在文档中,但它是一个公共方法以及文档中指出的方法,所以它应该工作正常.参考,这是声明(l.171-180 in vendor/laravel/framework/src/Illuminate/Pagination/Environment.php):

/**
 * Set the input page parameter name used by the paginator.
 *
 * @param  string  $pageName
 * @return void
 */
public function setPageName($pageName)
{
    $this->pageName = $pageName;
}
Run Code Online (Sandbox Code Playgroud)

现在考虑到你将在url中附加另一个查询字符串,所以你需要告诉分页考虑它.使用appends()方法:

$collection1->appends(array_except(Request::query(), 'page'))->links();

$collection2->appends(array_except(Request::query(), 'other_page'))->links();
Run Code Online (Sandbox Code Playgroud)

也就是说,告诉每个Presenter使用所有查询字符串构建url(由Request::query() 没有 paginator使用的当前索引产生的数组,或者你最终得到一个double值).array_except()是一个内置于数组助手中的Laravel,它返回已传递索引(第二个参数)的给定数组(第一个参数).

我会尽快测试这段代码,但它应该可行.无论如何,让我知道!

  • 对于downvoters,请考虑这个答案可能会引用与您正在使用的**版本不同的Laravel版本******然后**可能不适用于较新版本.只是说. (4认同)
  • `$ collection2-> setPageName('other_page');`>>>**call_user_func_array()期望参数1是有效的回调,类'Illuminate\Support\Collection'没有方法'setPageName'** (2认同)

mos*_*eim 15

在laravel 5.3(maibe在其他laravel 5版本中工作),我使用如下:

    $produk = Produk::paginate(5, ['*'], 'produk');
    $region = Region::paginate(5, ['*'], 'region');
Run Code Online (Sandbox Code Playgroud)

并且在叶片模板中附加其他的电流来保持位置:

    {{$produk->appends(['region' => $region->currentPage()])->links()}}    
    {{$region->appends(['produk' => $produk->currentPage()])->links()}}    
Run Code Online (Sandbox Code Playgroud)


Rub*_*ens 8

Laravel 5.7

Model->paginate(10, ['*'], 'paramName');

10 = Max items per page

['*'] = colums

paramName = pagination param name
Run Code Online (Sandbox Code Playgroud)

照亮\数据库\口才\生成器


Jer*_*ite 5

在Laravel 5.2中,使用时声明页面名称paginate().

这是一个适用于页面上多个分页器的示例.

  • 请务必$pageName为其他型号指定其他型号.

看方法 \Illuminate\Database\Eloquent\Builder::paginate()

/**
 * Get things by ownerId
 *
 * @param integer $ownerId The owner ID.
 *
 * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator Returns a pagination instance.
 */
public function getThings($ownerId)
{
    $builder = \App\Models\Things::where('ownerId', '=', (integer) abs($ownerId));

    // dd([
    //     '__METHOD__' => __METHOD__,
    //     '__FILE__' => __FILE__,
    //     '__LINE__' => __LINE__,
    //     '$ownerId' => $ownerId,
    //     'sql' => $builder->toSql(),
    //     '$builder' => $builder,
    //     'paginate' => $builder->paginate($perPage = null, $columns = ['*'], $pageName = 'p', $page = null),
    // ]);

    return $builder->paginate($perPage = null, $columns = ['*'], $pageName = 'p', $page = null);
}
Run Code Online (Sandbox Code Playgroud)

注意: $pageName = 'p'