我的分页遇到了一些麻烦.我有两个表来自数据库中的数据,我用laravel Paginator对它进行了分页.
现在我的问题是当你去,例如,第2页它添加?page = 2但这使第一个表也转到第2页.
反正有没有得到这样的东西?
page_table1={number}&page_table2={number}
所以你不要在其他表上应用页面更改.
不幸的是我现在无法测试这段代码,但浏览文档和代码(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');
该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; }
现在考虑到你将在url中附加另一个查询字符串,所以你需要告诉分页考虑它.使用appends()
方法:
$collection1->appends(array_except(Request::query(), 'page'))->links(); $collection2->appends(array_except(Request::query(), 'other_page'))->links();
也就是说,告诉每个Presenter使用所有查询字符串构建url(由Request::query()
没有 paginator使用的当前索引产生的数组,或者你最终得到一个double值).array_except()
是一个内置于数组助手中的Laravel,它返回已传递索引(第二个参数)的给定数组(第一个参数).
我会尽快测试这段代码,但它应该可行.无论如何,让我知道!
Laravel 5.7
Model->paginate(10, ['*'], 'paramName'); 10 = Max items per page ['*'] = colums paramName = pagination param name
照亮\数据库\口才\生成器
这是我在Laravel 4上找到的一个简单的解决方案.
调节器
在创建分页器之前更改页面名称:
Paginator::setPageName('page_a'); $collection_A = ModelA::paginate(10); Paginator::setPageName('page_b'); $collection_B = ModelB::paginate(10);
视图
执行相同操作:在打印链接之前更改页面名称
Paginator::setPageName('page_a'); $collection_A->links(); Paginator::setPageName('page_b'); $collection_B->links();
如果您不希望在导航到其他页面时丢失任何页面状态,请将链接附加到所有集合的当前页面:
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();
在laravel 5.3(maibe在其他laravel 5版本中工作),我使用如下:
$produk = Produk::paginate(5, ['*'], 'produk'); $region = Region::paginate(5, ['*'], 'region');
并且在叶片模板中附加其他的电流来保持位置:
{{$produk->appends(['region' => $region->currentPage()])->links()}} {{$region->appends(['produk' => $produk->currentPage()])->links()}}
$publishedArticles = Article::paginate(10, ['*'], 'published'); $unpublishedArticles = Article::paginate(10, ['*'], 'unpublished');
第三个参数使用如下:
laravel /公/文章?发表= 3
laravel /公/文章?未公布= 1
在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); }
注意: $pageName = 'p'