如何检查是不是在laravel中使用了分页

Posted

技术标签:

【中文标题】如何检查是不是在laravel中使用了分页【英文标题】:How to check if used paginate in laravel如何检查是否在laravel中使用了分页 【发布时间】:2017-02-20 00:36:24 【问题描述】:

我有一个自定义视图,在某些功能中,我使用了paginate,而其他功能我不使用paginate。现在如何检查我是否使用了paginate

@if($products->links())

   $products->links()

@endif // not work 

当然我知道我可以使用一个变量作为 true false 来检查它,但是有任何本地函数来检查它吗?

【问题讨论】:

你能试试这个吗? !! $products->links() !! 【参考方案1】:

这非常有效。检查$products 是否是Illuminate\Pagination\LengthAwarePaginator 的实例,然后显示分页链接。

@if($products instanceof \Illuminate\Pagination\LengthAwarePaginator )

   $products->links()

@endif

【讨论】:

最好的方法是$products->hasMorePages() 请记住,长度感知分页器与简单分页器不同(不计算总页数)。为此,请检查 \Illuminate\Pagination\Paginator 的实例。两者都扩展\Illuminate\Pagination\AbstractPaginator,以便可以用来捕获任何一个。【参考方案2】:
@if ($threads->hasPages())
   $threads->links() 
@endif

简单的一个!

【讨论】:

我将分页链接放在一个容器中,但有时没有足够的结果来生成页面。这解决了它!【参考方案3】:

这样试试

@if($products instanceof \Illuminate\Pagination\AbstractPaginator)

   $products->links()

@endif

您需要检查$productsIlluminate\Pagination\AbstractPaginator 的实例。它可以是一个数组,也可以是 Laravel 的 Collection

【讨论】:

我收到一个错误Parse error: syntax error, unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$' 你的php版本是什么? 我正在使用 Laravel Homestead。 PHP 版本 7.0.2-4+deb.sury.org~trusty+1 嗯...这很奇怪。您可以尝试:'Illuminate\Pagination\Paginator' 而不是 \Illuminate\Pagination\Paginator::class,但 PHP 版本允许这样做。也许你在其他地方得到了这个错误? 现在收到错误Parse error: syntax error, unexpected '''' (T_CONSTANT_ENCAPSED_STRING)【参考方案4】:

美丽的方式:

@if ($products->hasMorePages())
     $products->links() 
@endif

Click here to see the official documentation

【讨论】:

最后一页会隐藏分页链接【参考方案5】:

从 laravel 7 开始,您现在可以这样做:

@if( $vehicles->hasPages() )
    $vehicles->links() 
@endif

【讨论】:

【参考方案6】:

不要对变量的基类进行检查。这可能会导致在未来的 Laravel 版本中更改基类出现问题。只需检查方法链接是否存在:

@if(method_exists($products, 'links'))
    $products->links() 
@endif

【讨论】:

【参考方案7】:

更正的代码(添加“isset”):

@if(isset($products->links()))

   $products->links()

@endif

短版:

$products->links() ?? ''

它适用于 paginate、simplePaginate 和没有分页的情况。带有“$products->hasMorePages()”的解决方案不会在最后一页显示分页链接。

【讨论】:

6 在你之前回答...解释为什么使用你的...而不是其他人。【参考方案8】:

另一种方式:

@if (class_basename($products) !== 'Collection')
    $products->links() 
@endif

您可以使用 PHP 函数:get_class($products) - 获取完整的类名。 Laravel 应该有一些功能来检查 ->paginate() 是否正在使用。

【讨论】:

【参考方案9】: 只写paginate(0) 而不是get() 刀片模板:只需使用$products->links。不需要@if @endif

【讨论】:

【参考方案10】:

laravel 分页有 2 种类型:

simplePaginate() 将返回 \Illuminate\Pagination\Paginator paginate() 将返回 Illuminate\Pagination\LengthAwarePaginator

基于以上情况,你可以试试这个解决方案:

@if(
    $products instanceof \Illuminate\Pagination\Paginator ||
    $products instanceof Illuminate\Pagination\LengthAwarePaginator
  )
  $products->links() 
@endif

【讨论】:

【参考方案11】:

请使用以下格式

@if($products instanceof \Illuminate\Pagination\LengthAwarePaginator )

   $products->links()

@endif                 

【讨论】:

【参考方案12】:
@if($products->currentPage() > 1)

   $products->links()

@endif

【讨论】:

虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。

以上是关于如何检查是不是在laravel中使用了分页的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 是不是内置了分页功能?

在laravel中改变分页箭头

如果应用了分页,并且你不知道在3页中,值会出现在哪里,如何使用响应断言?

Laravel —— 特殊分页

Laravel 5.2 分页

如何使用聚合在猫鼬中对文档数组进行分页?