【问题标题】:Can't use pagination on hasMany relationship不能在 hasMany 关系上使用分页
【发布时间】:2014-09-23 18:40:21
【问题描述】:

这是我的类别模型:

public function products() {
    return $this->hasMany('Product');
}

然后我打印每个类别的所有产品:

@foreach($category->products as $product)
    {{ $product->title }}
@endforeach

但是,它会将所有相关产品打印到此类别。在这种情况下我该如何使用分页?我尝试在底部打印分页链接:

<div class="pager">
    {{ $category->products()->paginate(12)->links() }}
</div>

它确实可以正确打印分页链接,但是当我更改页面时 - 内容没有改变。

【问题讨论】:

    标签: laravel laravel-4 pagination eloquent


    【解决方案1】:

    在发送数据查看前先分页结果如下。

    $products = $category->products()->paginate(12);
    

    现在将此值传递给视图并对其进行迭代。

    @foreach($products as $product)
        {{$product->title}}
    @endforeach
    

    要显示链接,只需调用视图中产品的链接方法。

    {{$products->links()}}
    

    【讨论】:

    • 没用。没有效果。仍然显示所有产品,不分页。
    • 这很奇怪,请向您的代码显示您将哪些值传递给视图以及您在视图中如何以及在做什么。你能粘贴你的新代码吗?
    【解决方案2】:

    您想先调用分页您的产品:

    public function products() {
         return $this->hasMany('Product');
    }
    
    public function recentProducts() {
         return $this->products()->paginate(12);
    }
    

    然后在你的视图中你循环遍历

    @foreach($category->recentProducts() as $product)
         {{ $product->title }}
    @endforeach
    

    然后是你的链接

    <div class="pager">
        {{ $category->recentProducts()->links() }}
    </div>
    

    【讨论】:

    • 您不使用Paginator 作为关系结果。
    • 关系在一个单独的方法中。拥有另一个方法recentProducts 意味着他可以在其他页面上重复使用分页结果
    • 好的,如果您不将其用作关系,那么可以。但是,在其他页面上重复使用它是什么意思?
    • 没用。它不是每页打印 12 个项目,而是打印所有 24 个项目,并且按寻呼机链接无效。
    【解决方案3】:

    将分页集合传递给视图:

    // controller
    $products = $category->products()->paginate(12);
    
    // view
    @foreach ($products as $product)
    
       // do what you need
    @endforeach
    
    // links:
    $products->links();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2013-04-03
      • 2021-07-01
      • 2010-12-08
      • 2018-09-09
      • 2010-12-02
      • 1970-01-01
      相关资源
      最近更新 更多