How to paginate a “has many” relationship that is ordered?

后端 未结 2 1675
无人及你
无人及你 2020-12-31 17:02

I would like to paginate the following relationship (a Category having many Apps):

class Category extends Model
{
            


        
2条回答
  •  爱一瞬间的悲伤
    2020-12-31 17:19

    To get this to work, I had to bypass the Eloquent Relationships. I created a repository instead.

    In this example, a user has lots of reports.

    App\Repositories\ReportsRepository

    This will get the reports records for a user.

    namespace App\Repositories;
    
    use App\User;
    
    class ReportsRepository
    {
        public function findByUser(User $user, $paginate = 10)
        {
            $reports = User::find($user->id)
                ->reports()
                ->orderBy('created_at', 'DESC')
                ->paginate($paginate);
            return $reports;
        }
    }
    

    ReportController

    Here we call the ReportsRepositroy to get the records (I've removed the Auth code).

    class ReportController extends Controller
    {
        public function index(\App\Repositories\ReportsRepository $repo)
        {
            $reports = $repo->findByUser(Auth::user());
            return view('report.index', ['reports' => $reports]);
        }
    }
    

    View - report/index.blade.php

    The important bit for pagination here is {!! $reports->render() !!}. This generates the links of the pagination.

    @extends('layout.master')
    
    @section('content')
        

    Reports

    @if ($reports->count()) @foreach($reports as $report) @endforeach
    Status Info Date
    {{ $report['status'] }} {{ $report['info'] }} {{ $report['created_at'] }}
    @else

    No records exist.

    @endif {!! $reports->render() !!}
    @stop

    This is all that's needed. Laravel deals with the rest of the pagination magic itself.

    Hope this helps.

提交回复
热议问题