【问题标题】:Laravel throwing: method paginate does not exist errorLaravel抛出:方法分页不存在错误
【发布时间】:2017-07-11 23:52:42
【问题描述】:

我正在尝试在 laravel 中使用分页。所以我尝试检索所有交易并将其分页。我的流程是这样的,供您参考 view->controller->repository->model 。

我的仓库:

public function getall(){

    $this->transaction = Transaction::all();


    return $this->transaction;

}

我的控制器:

 public function getall(){   
  $transactions = $this->transaction->getall()->paginate(10);

    //dd($this->transaction);



    return view('transactions', ['transactions' => $transactions]);

}

在我的服务提供商下的 app.php 中,我确保我有分页:Illuminate\Pagination\PaginationServiceProvider::class,

但是没有别名。 所以在我的控制器中我做了:使用 Illuminate\Pagination;

【问题讨论】:

    标签: php laravel pagination laravel-eloquent


    【解决方案1】:

    它不适合你的方式。因为all 方法会给你Collection。分页功能仅适用于Eloquent\BuilderEloquent Model

    如果需要对所有记录进行无条件分页,

    \App\Transaction::paginate(10);
    

    【讨论】:

    • \App\User::->paginate(10);应该是 \App\User::paginate(10);
    【解决方案2】:

    这样做

    //in repository
    public function getAll($limit)
    {
        $this->transaction = Transaction::paginate($limit); //Use paginate here.
         return $this->transaction;
    }
    
    //in controller 
    public function getall() {
        $transactions = $this->transaction->getall(10);
    
    }   
    

    【讨论】:

    • 谢谢兄弟,我使用了这种方法...我成功看到了前 10 个...但我没有看到底部的页面??
    • 它只显示前 10 个,因为您正在拉 10 个。您可以将值增加到 20 或任何您想要的值。
    • 是的,我明白了...但我看不到页码,为什么?
    • 您是否在视图中使用`{{ $transactions ->links() }}`?
    • 你使用的是什么版本的 Laravel?从控制器中删除 Use Illimunte\Pagination。它已经包含在 Eloquent 中。
    【解决方案3】:

    将以下函数添加到您的存储库中

    存储库

    public function getModel() {
        return new Transaction;
    }
    
    public function getAll() {
        return $this->getModel()->all();
    }
    
    public function paginate($limit = 15) {
        return $this->getModel()->paginate($limit);
    }
    

    控制器

    public function getAll() {
        $transaction = $this->transaction->paginate(10);
    
        return view('transactions', ['transactions' => $transactions]);
    }
    

    【讨论】:

    • 如果是这样,请接受它,以便对其他人有所帮助;)
    • Laravel 默认支持分页功能,无需新建。检查@geckob 答案。
    【解决方案4】:

    如果你想使用orderBy()paginate()

    用过类似的东西

     $transactions = Transaction::all();
    
     $transactions = Transaction::orderBy('name')->paginate(10);
    
     return view('index', compact('transactions'));
    

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2016-11-05
      • 2014-01-12
      相关资源
      最近更新 更多