首页 > 解决方案 > laravel 分页不适用于使用 withPagination

问题描述

分页不适用于分页。我究竟做错了什么?

过滤器没有重置,搜索没有更新,分页也不起作用。我注意到如果我删除use WithPagination,分页开始恢复。这是我的代码:

class PostsIndex extends Component
{
   use WithPagination;

    public $status;
    public $school;
    public $filter;
    public $search;

    protected $queryString = [
        'status',
        'school',
        'filter',
        'search',
    ];

    protected $listeners = ['queryStringUpdatedStatus'];

    public function mount()
    {
        $this->status = request()->status ?? 'All';
    }

    public function updatingSchool()
    {
        $this->resetPage();
    }

    public function updatingFilter()
    {
        $this->resetPage();
    }

    public function updatingSearch()
    {
        $this->resetPage();

    }

    public function updatedFilter()
    {
        if ($this->filter === 'My Exp') {
            if (! auth()->check()) {
                return redirect()->route('login');
            }
        }
    }


    public function queryStringUpdatedStatus($newStatus)
    {
        $this->resetPage();
        $this->status = $newStatus;
    }

    public function render()
    {
        $statuses = Status::all()->pluck('id', 'name');
        $schools = School::all();

        return view('livewire.posts-index', [
            'posts' => Post::with('user', 'school', 'status')
            ->when($this->status && $this->status !== 'All', function ($query) use ($statuses) {
                return $query->where('status_id', $statuses->get($this->status));
            })->when($this->school && $this->school !== 'All Schools', function ($query) use ($schools) {
                return $query->where('school_id', $schools->pluck('id', 'name')->get($this->school));
            })->when($this->filter && $this->filter === 'Top Exp', function ($query) {
                return $query->orderByDesc('votes_count');
            })->when($this->filter && $this->filter === 'My Exp', function ($query) {
                return $query->where('user_id', auth()->id());
            })->when($this->filter && $this->filter === 'Spam Posts', function ($query) {
                return $query->where('spam_reports', '>', 0)->orderByDesc('spam_reports');

            })->when(strlen($this->search) >= 3, function ($query) {
                return $query->where('body', 'like', '%'.$this->search.'%');
            })
                ->addSelect(['voted_by_user' => Vote::select('id')
                    ->where('user_id', auth()->id())
                    ->whereColumn('post_id', 'posts.id')
                ])
                ->withCount('votes')
                ->withCount('comments')
                ->orderBy('id', 'desc')
                ->simplePaginate(10)
                ->withQueryString(),
                'schools' => $schools,
        ]);
    }
}

标签: laravel

解决方案


推荐阅读