Laravel 抛出:方法 paginate 不存在错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/42382893/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 15:23:18  来源:igfitidea点击:

Laravel throwing: method paginate does not exist error

phplaravelpaginationlaravel-eloquent

提问by Mikethetechy

I am trying to use pagination in laravel. so i try to retrieve all the transactions and paginate it. my flow goes like this for your reference view->controller->repository->model .

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

myrepository:

我的存储库:

public function getall(){

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


    return $this->transaction;

}

mycontroller:

我的控制器:

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

    //dd($this->transaction);



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

}

in my app.php under service providers i made sure i have pagination: Illuminate\Pagination\PaginationServiceProvider::class,

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

but there is no aliases though. so in my controller i did : use Illuminate\Pagination;

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

回答by geckob

It won't work with your way. Because allmethod will give your Collection. Paginate function only works on Eloquent\Builderor Eloquent Model

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

If you need to paginate all records without condition,

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

\App\Transaction::paginate(10);

回答by EddyTheDove

Do like this

这样做

//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);

}   

回答by Saravanan Sampathkumar

Add the following function to your repository

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

Repository

存储库

public function getModel() {
    return new Transaction;
}

public function getAll() {
    return $this->getModel()->all();
}

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

Controller

控制器

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

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

回答by benjamintemitope

If you want to used orderBy()and paginate()

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

Used something like this

使用了这样的东西

 $transactions = Transaction::all();

 $transactions = Transaction::orderBy('name')->paginate(10);

 return view('index', compact('transactions'));